您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

根据父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迭代将您的平面从树转换为树?

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

其他 2022/1/1 18:20:13 有556人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶