如何在循环中的复杂数组的最低级别设置数组条目?

时间:2014-04-04 12:18:17

标签: php arrays loops

好的,我承认这个问题令人困惑,但我不知道怎么用另一种方式说出来。我有一个看起来像这样的数组:

array(3) {
  [0]=>
  array(1) {
    [some_middle-level_id]=>
    array(1) {
      [some_low-level_id]=>
      array(5) {
        ["entry1"]=>
        string(...) "..."
        ["entry2"]=>
        string(...) ""
        ...
      }
    }
  }  
  [1]=>
  array(1) {
    [another_middle-level_id]=>
    array(5) {
      [another_low_level_id]=>
      array(5) {
        ["entry1"]=>
        string(...) "..."
        ["entry2"]=>
        string(...) ""
        ...
      }
    }
  }
  [2]=>
  array(1) {
    [another_middle-level_id]=>
    array(5) {
      [another_low_level_id]=>
      array(5) {
        ["entry1"]=>
        string(...) "..."
        ["entry2"]=>
        string(...) ""
        ...
      }
      [another_low_level_id]=>
      array(5) {
        ["entry1"]=>
        string(...) "..."
        ["entry2"]=>
        string(...) ""
        ...
      }
    }
  }

编辑: 另一个数组看起来像这样。假设第一个数组中有3个[low_level_id],那么另一个数组看起来就像这样:

array(3) { [0]=> string(3) "bla" [1]=> string(4) "blub" [2]=> string(6) "lalala"}

和另一个具有与“低级别id”条目一样多的条目的数组存在。在每个包含5个条目的“低级别id”-entry中,我想添加第六个条目 - 来自另一个数组的字符串。但我不知道如何访问它。是否可以在不使用数百个循环的情况下访问它?

另一个编辑: 我可以通过以下方式访问第一个条目:

foreach($my_array as $key => $subkey){
    foreach($subkey as $val){
         $my_array[$key][key($subkey)][key($val)]['6th_entry']="a new string";
    }
}

但这仅适用于第一个新条目。我不知道如何访问其他人以及如何添加循环以从其他数组添加条目。

1 个答案:

答案 0 :(得分:1)

您可以使用array_map的嵌套调用。假设$array是第一个数组而$another_array是第二个数组,代码应如下所示:

$result = array_map(
    function ($elem1) use(&$another_array) {
        return array_map(
            function ($elem2) use(&$another_array) {
                return array_map(
                    function ($elem3) use(&$another_array) {
                        list(, $val) = each($another_array);
                        $elem3['entry6'] = $val;
                        return $elem3;
                    },
                    $elem2
                );
            },
            $elem1
        );
    },
    $array
);

Demo