添加到最深的数组子元素

时间:2015-08-16 22:49:14

标签: php arrays

如何从多维数组中选择最深的子元素,以便在php中为该特定元素添加另一个元素(始终知道它的添加位置,以防万一需要来自父元素的其他信息才能创建新的孩子)?

例如。有这样的数组我希望能够为每个添加另一个aaaa,bbbb,cccc:aaa,bbb,ccc?然后在aaaaa,bbbbb,...到每个aaaa,bbbb ......等等(每个新元素都知道它的父级名称)。

array(
"a"=> array(
    "aa"=> array(
       "aaa",
       "bbb",
       "ccc"
       ),
    "bb"=> array(
       "aaa",
       "bbb",
       "ccc"
       ),
    "aa"=> array(
       "aaa",
       "bbb",
       "ccc"
       ),
    ),
"b"=> array(
    "aa"=> array(
       "aaa",
       "bbb",
       "ccc"
       ),
    "bb"=> array(
       "aaa",
       "bbb",
       "ccc"
       ),
    "aa"=> array(
       "aaa",
       "bbb",
       "ccc"
       ),
    ),
"c"=> array(
    "aa"=> array(
       "aaa",
       "bbb",
       "ccc"
       ),
       […]
    ),
);

2 个答案:

答案 0 :(得分:2)

您可能想要使用array_walk_recursive。它允许您遍历多维数组的所有叶子。

function add_children(&$item, $key)
{
    //Here you can change item to something else (since we use &)
    $item = array('aaaa', 'bbbb', 'cccc');
}

array_walk_recursive($array, 'add_children');

Disclaimar:我还没有测试过这段代码。

答案 1 :(得分:1)

您可以使用递归。我不确定您的示例是否表明您的实际数据将如何显示,但在这种情况下,最深的元素不是数组,因此您可以执行以下操作:

<?php
$testArray = array(
  'a' => array(
    'aa' => array(
      'aaa',
      'bbb'
    )
  )
);

print_r(modifyArray($testArray));

function modifyArray($array)
{
  foreach ($array as $key => $value) {
    if (is_array($value)) {
      $array[$key] = modifyArray($value);
    } else {
      $array[$value] = $value . substr($value, 0, 1);
      unset($array[$key]);
    }
  }

  return $array;
}