簡體   English   中英

在PHP中將數組鍵轉換為字符串

[英]Convert array keys to a string in PHP

示例數組:

$array = array([key1] => 
                array([key11] => 
                     array([key111] => 'value111', 
                           [key112] => 'value112', 
                           [key113] => 'value113',
                           [key114] => array(A,B,C,D), 
                          ),
                 ),
           );

我需要以下數組的輸出:

array([key1/key11/key111] => 'value111',
      [key1/key11/key112] => 'value112', 
      [key1/key11/key113] => 'value113',
      [key1/key11/key114] => 'A,B,C,D' );

我已經嘗試使用此功能,

function listArrayRecursive($someArray, &$outputArray, $separator = "/") {
    $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($someArray), RecursiveIteratorIterator::SELF_FIRST);
    foreach ($iterator as $k => $v) {

        if (!$iterator->hasChildren()) {
            for ($p = array(), $i = 0, $z = $iterator->getDepth(); $i <= $z; $i++) {
                $p[] = $iterator->getSubIterator($i)->key();
            }
            $path = implode($separator, $p);
            $outputArray[] = $path;
        }
    }
}

$outputArray = array();
listArrayRecursive($array, $outputArray);

我無法找到如何通過使用上面的函數為“ key1 / key11 / key114”實現上述功能來實現此功能,這與我期望的一樣。 請幫我。

輸入:

$array = array(
    'key1' => array(
        'key11' => array(
            'key111' => 'value111', 
            'key112' => 'value112', 
            'key113' => 'value113',
            'key114' => array('A','B','C','D'), 
        ),
        'key12' => array(
            'key121' => 'value121', 
            'key122' => 'value122', 
            'key123' => 'value123',
            'key124' => array('A','B','C','D'), 
        ),
    ),
    'key2' => array(
        'key21' => array(
            'key211' => 'value111', 
            'key212' => 'value112', 
            'key213' => 'value113',
            'key214' => array('A','B','C','D'), 
        ),
    ),
);

腳本:

function remap_keys($input, $max_depth, $separator = '/', /* reserved */ $keychain = array(), /* reserved */ &$output = array())
{
    foreach ($input as $key => $element)
    {
        $element_keychain = array_merge($keychain, (array)$key);
        if (($max_depth > 1) && is_array($element))
            remap_keys($element, $max_depth -1, $separator, $element_keychain, $output);
        else
            $output[implode($separator, $element_keychain)] = implode(',', (array)$element);
    }
    return $output;
}


$array = remap_keys($array, 3);

print_r($array);

輸出:

Array
(
    [key1/key11/key111] => value111
    [key1/key11/key112] => value112
    [key1/key11/key113] => value113
    [key1/key11/key114] => A,B,C,D
    [key1/key12/key121] => value121
    [key1/key12/key122] => value122
    [key1/key12/key123] => value123
    [key1/key12/key124] => A,B,C,D
    [key2/key21/key211] => value111
    [key2/key21/key212] => value112
    [key2/key21/key213] => value113
    [key2/key21/key214] => A,B,C,D
)

http://ideone.com/pqH45h

$array = array('key1' => 
                array('key11' => 
                     array('key111' => 'value111', 
                           'key112' => 'value112', 
                           'key113' => 'value113',
                           'key114' => array(A,B,C,D), 
                          ),
                 ),
           );
function implode_arr_keys($array, $output_arr = array(), $cur_key = FALSE) {
    foreach($array as $key => $value) {
        if(is_array($value)) {
            return implode_arr_keys($value, $output_arr, ($cur_key == FALSE ? $key : $cur_key.'/'.$key));
        } else {
            if(!is_numeric($key))
                $output_arr[$cur_key.'/'.$key] = $value;
            else
                $output_arr[$cur_key] = $array;
        }
    }
    return $output_arr;
}
print_r($array);
print_r(implode_arr_keys($array));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM