脚本宝典收集整理的这篇文章主要介绍了php – 根据父ID值将数组从一个转换为多维,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
array( array( "id" => 45,"parent_id" => null ),array( "id" => 200,"parent_id" => 45 ),array( "id" => 345,array( "id" => "355","parent_id" => 200 ) );
我应该如何将其转换为多维数组:
array( array( "id" => 45,"parent_id" => null,"children" => array( array( "id" => 200,"parent_id" => 45,"children" => array( "id" => "355","parent_id" => 200 ) ),array( "id" => 345,"parent_id" => 45 ),) ),);
// 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,则不起作用.但可以轻松更改以反映这一点.
这是一个相关的问题,原始阵列已经锁定,所以解决方案的前半部分可以省去:Nested array. Third level is disappearing.
编辑:
那么这是如何工作的呢?这是利用PHP变量别名(也称为references)和(临时)数组,用于存储a)别名到节点($keyed)和b)来构建新的树顺序($tree).
由于$keyed和$tree都包含对$array中值的引用,我首先将该信息复制到$array中,例如:
$array = $keyed;
由于现在$keyed仍然设置(并且包含与$array中相同值的引用),因此取消设置$keyed:
unset($keyed);
这将取消设置$keyed中的所有引用,并确保$array中的所有值都不再被引用(值的refcount减1).
如果迭代后没有取消设置临时数组,它们的引用仍然存在.如果你在$array上使用VAR_dump,你会发现所有的值都有一个&在前面,因为他们仍然被引用. unset($keyed)再次删除这些引用,var_dump($array),你会发现& s已经消失了.
我希望这是可以理解的,如果你不能流利的话,有时很难引用参考文献.它经常帮助我将它们视为可变别名.
如果您想进行一些锻炼,请考虑以下事项:
以上是脚本宝典为你收集整理的php – 根据父ID值将数组从一个转换为多维全部内容,希望文章能够帮你解决php – 根据父ID值将数组从一个转换为多维所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。