我有一个带有父子关系的Tree结构化数组。 我希望将数组展平以便于解析。
Array
(
[0] => Array
(
[ParentID] => 11653
[FolderID] => 11823
[Items] => Array
(
[0] => Array
(
[ParentID] => 11823
[FolderID] => 11824
[Items] => Array
(
[0] => Array
(
[ParentID] => 11824
[FolderID] => 11827
[Items] => Array
(
[0] => Array
(
[ParentID] => 11827
[FolderID] => 11828
)
)
)
)
)
[1] => Array
(
[ParentID] => 11823
[FolderID] => 11825
[Items] => Array
(
[0] => Array
(
[ParentID] => 11825
[FolderID] => 11826
)
)
)
)
)
)
期望的输出:
Array
(
[0] => Array
(
[ParentID] => 11653
[FolderID] => 11823
)
[1] => Array
(
[ParentID] => 11823
[FolderID] => 11824
)
[2] => Array
(
[ParentID] => 11824
[FolderID] => 11827
)
[3] => Array
(
[ParentID] => 11827
[FolderID] => 11828
)
[4] => Array
(
[ParentID] => 11823
[FolderID] => 11825
)
[5] => Array
(
[ParentID] => 11825
[FolderID] => 11826
)
)
我在这里尝试了许多扁平化逻辑,但我无法获得所需的输出。
答案 0 :(得分:2)
使用array_walk_recursive,其中$ array是你的数组,$ new_array是扁平数组。
array_walk_recursive($array, function($item, $key) use (&$new_array, &$i)
{
$new_array[(int) $i][$key] = $item;
($key == 'ParentID') ?: $i++;
});
var_dump($new_array);
如果你想要它进行解析,你也可以这样做:
array_walk_recursive($array, function($item, $key)
{
*Your parsing for each array*
});
答案 1 :(得分:1)
此功能适用于展平多维数组:
function array_flatten($array)
{
if(!is_array($array)) {
return FALSE;
}
$result = array();
foreach($array as $key => $value) {
if(is_array($value)) {
$result = array_merge($result, array_flatten($value));
} else {
$result[$key] = $value;
}
}
return $result;
}
答案 2 :(得分:-1)
从静态变量开始。
然后创建一个接受数组的函数,迭代它,并使用ParentID和FolderID向静态变量添加一个元素。如果数组还包含名为“Items”的元素并且是一个数组,则将其递归地应用于此函数。