【发布时间】:2012-11-06 17:52:25
【问题描述】:
我有一个如下所示的多维数组:
$trees = array(
array(
'name' => 'Parent',
'__children' => array(
array(
'name' => 'Child'
),
array(
'name' => 'Second Child'
)
)
)
);
数组的深度未知,我需要递归地展平它。所以看起来更像这样:
array(
array(
'name' => 'Parent'
),
array(
'name' => 'Child'
),
array(
'name' => 'Second Child'
)
)
我认为这样的事情可能会奏效:
public function flattenTree($trees, $tree = array())
{
foreach($trees as $item){
//$i = 1, 2, then 3
$i = count($tree);
$tree[$i] = array('name' => $item['name']);
if(isset($item['__children']))
$this->flattenTree($item['__children'], $tree);
}
return $tree;
}
但这只是给我:(
Array
(
[0] => Array
(
[name] => Parent
)
)
我不确定如何执行此操作。有可能吗?
作为奖励,我真的需要输出数组看起来像这样(注意名称值已更改):)
array(
array(
'name' => 'Parent'
),
array(
'name' => 'Parent Child'
),
array(
'name' => 'Parent Second Child'
)
)
非常感谢您对此提供的帮助。期待解决方案。我被难住了!
【问题讨论】:
-
不能指定没有索引的数组元素。我确定你现在得到了正确的输出
-
您的问题是缺少数组中的子元素吗?
-
@mohamed 是的。由于某种原因,输出不包含孩子
-
@JohnConde 您是否有机会从该链接中获取示例并将其应用到此处?我不确定它究竟是如何工作的,尤其是在基于树构建全名时。
标签: php arrays recursion multidimensional-array logic