【问题标题】:add to deepest array child element添加到最深的数组子元素
【发布时间】:2025-12-19 23:05:11
【问题描述】:

如何从多维数组中选择最深的子元素,以便在 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"
       ),
       […]
    ),
);

【问题讨论】:

  • 真实的例子更容易理解(至少对我来说)
  • array_walk_recursive 听起来很适合。

标签: php arrays


【解决方案1】:

您可能想使用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');

免责声明:我没有测试过这段代码。

【讨论】:

  • 据我了解,这仅访问叶节点。是否还有一种方法可以遍历每个可能的路径,以防需要来自父级的其他信息才能创建新的子级?
  • 你是对的,它只访问叶节点。据我了解您目前提出的问题,这应该足够了,所以我不会编辑我的答案。如果您需要有关叶子的“路径”的信息,则需要切换方法并实现自己的递归。 This 问题可能会提供一些指导。
【解决方案2】:

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

<?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;
}

【讨论】:

    最近更新 更多