根据父ID值将数组从一维转换为多维

根据父ID值将数组从一维转换为多维,第1张

根据父ID值将数组从一维转换为多维

以下代码示例 数组

$array
转换为您要查找的树结构:

// key the array by id$keyed = array();foreach($array as &$value){    $keyed[$value['id']] = &$value;}unset($value);$array = $keyed;unset($keyed);// tree it$tree = array();foreach($array as &$value){    if ($parent = $value['parent_id'])        $array[$parent]['children'][] = &$value;    else        $tree[] = &$value;}unset($value);$array = $tree;unset($tree);var_dump($array); # your result

如果 现有的 父ID为,则此方法无效

0
。但是可以很容易地更改以反映这一点。

编辑:

那么这是如何工作的呢?这利用了PHP变量别名(也称为引用)和(临时)数组,这些数组用于将a)别名存储到节点(

$keyed
)和b)来建立新的树顺序(
$tree
)。

你能[…]解释的目的

$array = $keyed
$array = $tree
并取消设置

作为

$keyed
$tree
都包含对中的值的引用
$array
,我首先将该信息复制到
$array
,例如:

$array = $keyed;

由于现在

$keyed
仍处于设置状态(并且包含与中相同的值的引用
$array
),
$keyed
因此未设置:

unset($keyed);

这将取消设置中的所有引用,

$keyed
并确保
$array
不再引用中的所有值(该值的refcount减少一)。

如果临时数组在迭代后未设置,则它们的引用将仍然存在。如果使用

var_dump
$array
,你会看到所有的值将有一个
&
在前面,因为它们仍然被引用。再次
unset($keyed)
删除这些引用,
var_dump($array)
您将看到
&
s消失了。

我希望这是可以理解的,如果您不熟练使用参考文献,有时可能会很难遵循。它通常可以帮助我将它们视为变量别名。

如果您想做些运动,请考虑以下事项:

如何

$array
使用一次foreach迭代将您的平面从树转换为树?

您可以自行决定何时单击包含解决方案的链接。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5564603.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存