php:在多维数组中添加一个数组作为新级别

时间:2018-04-04 14:22:26

标签: php arrays multidimensional-array

假设我有两个数组:

$a = ['a', 'b' => array('Jack', 'John'), 'c'];
$b = ['1', '2', '3'];

如何将$b推送到""价值'杰克'在$a中,使它成为一个多维数组?所以,最终结果应如下所示:

$ab = ['a', 'b' => ['Jack' => ['1', '2', '3'], 'John'], 'c'];

我知道这会将$a[1]['Jack'] = 'b'的价值变为关键,但对我来说没问题。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

您可以使用函数递归迭代数组,直到获得正确的值('Jack'),如下所示:

function iterateArr (&$array) {
    if (is_array($array)) {
        foreach ($array as $key => &$val) {
            if (is_array($val)) {
                iterateArr($val);
            } elseif ($val == 'Jack') {
                global $b;
                unset($array[$key]);
                $array[$val] = $b;
            }
        }
    }
}

iterateArr($a);

对于您的示例,此输出:

['a', 'b' => ['John', 'Jack' => ['1', '2', '3']], 'c']

eval.in demo

但是它的美妙之处在于,无论数组的深度是多少,它都可以工作,因为它是一个递归迭代器。例如,对于像这样的数组:

['a', 'b' => ['1', '2', '3' => ['i' => ['Jack', 'John'], 'ii', 'ii', 'iv', 'v']], 'c']

输出为:

['a', 'b' => ['1', '2', '3' => ['i' => ['John', 'Jack' => ['1', '2', '3']], 'ii', 'ii', 'iv', 'v']], 'c']

eval.in demo

答案 1 :(得分:0)

$a = ['a', 'b' => array('Jack', 'John'), 'c'];
$b = ['1', '2', '3'];

unset($a['b'][0]); // go inside array $a and get the first value (B in 
                   // this case) 
                   // Then get the key you wanna change.
                   // Remove that value so we can 'reset' it.
$a['b'][0] = $b;   // set array $b as that value;