在PHP中将新元素添加到N级Multidimentional数组中

时间:2016-01-18 18:02:54

标签: php multidimensional-array

我有一个像这样的N级Multidimentional数组:

Array
(
[0] => Array
    (
        [id] => 7_cat
        [text] => cat1
        [children] => Array
            (
                [0] => Array
                    (
                        [id] => 9_cat
                        [text] => cat3
                    )

            )

    )

[1] => Array
    (
        [id] => 8_cat
        [text] => cat2
    )

[2] => Array
    (
        [id] => 13_cat
        [text] => cat4
    )
)

我有一个像这样的索引数组:

Array
(
[0] => 0
[1] => children
[2] => 0
[3] => id
)

所以我想在这些深度中在第一个数组中添加一个新元素。在这个例子中,我想在$ firstarray [0] ['children'] [0] ['id']中添加一个新元素。 我该怎么办?

非常感谢

3 个答案:

答案 0 :(得分:0)

喜欢这个

此处 $ oldArray 是您的第一个数组

$indexArray=Array
(
[0] => 0
[1] => children
[2] => 0
[3] => id
);

$indexForold=[];
foreach($indexArray as $indx){
         $indexForold=$indexForold[$indx];
}

$oldArray[$indexForold]=$myVal;

答案 1 :(得分:0)

解决方法是,在遍历数组时使用reference来保持对当前数组元素的引用。

  • 此处$nArr是您的n维数组,$indexArr是您的索引数组。
  • 并且不要忘记将<YOUR_VALUE>替换为您想要的值。

所以你的代码应该是这样的:

$arrLength = count($indexArr);

$tmpArr = null;
$i = 0;
for(; $i < $arrLength - 1; ++$i){
    if($tmpArr == null){
        $tmpArr = &$nArr[$indexArr[$i]];
    }else{
        $tmpArr = &$tmpArr[$indexArr[$i]];
    }
}

$tmpArr[$indexArr[$i]] = <YOUR_VALUE>;

// now display the n-dimensional array

echo "<pre>"; 
print_r($nArr); 
echo "</pre>";

答案 2 :(得分:0)

你可以试试这样的......

$array = [
    [
        'id' => '7_cat',
        'text' => 'cat1',
        'children' => [
            [
                'id' => '9_cat',
                'text' => 'cat3'
            ]
        ]
    ],
    [
        'id' => '8_cat',
        'text' => 'cat2'
    ],
    [
        'id' => '13_cat',
        'text' => 'cat4'
    ]
];


$multIndexValue = function (array $indexList, array $searchArray) {
    $result = $searchArray;

    foreach ($indexList as $index) {
        $result = $result[$index];
    }


    return $result;
};


$search = [0, 'children', 0, 'id'];


$result = $multIndexValue($search, $array); // string(5) "9_cat"