【问题标题】:add new element to an N-level Multidimentional array in PHP在 PHP 中向 N 级多维数组添加新元素
【发布时间】:2016-04-24 00:07:11
【问题描述】:

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

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'] 中添加一个新元素。 我该怎么做?

非常感谢

【问题讨论】:

  • 没什么,我不知道怎么做。我是php新手。
  • 你至少需要尝试一些东西,伙计。至少向我们展示或告诉我们您认为应该如何解决问题。不需要 php,只需您尝试解决问题。

标签: php multidimensional-array


【解决方案1】:

你可以试试这样的……

$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"

【讨论】:

    【解决方案2】:

    解决方案是,在遍历数组时使用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>";
    

    【讨论】:

      【解决方案3】:

      这样做

      这里 $oldArray 是你的第一个数组

      $indexArray=Array
      (
      [0] => 0
      [1] => children
      [2] => 0
      [3] => id
      );
      
      $indexForold=[];
      foreach($indexArray as $indx){
               $indexForold=$indexForold[$indx];
      }
      
      $oldArray[$indexForold]=$myVal;
      

      【讨论】:

      • 谢谢,但是当我使用它时,$indexForold 为空并且没有改变任何东西。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-07
      • 2021-12-30
      • 2018-06-28
      • 2013-05-28
      相关资源
      最近更新 更多