为了账号安全,请及时绑定邮箱和手机立即绑定

PHP分层数组 - 父母和孩子

PHP分层数组 - 父母和孩子

PHP
慕斯王 2022-06-11 18:07:25
我正在创建一个父子层次结构数组。请在数组下方找到并帮助我修复。它parent_id在按顺序时工作正常,但我想保持我的数组值相同。function Testing(){    $tasks[] = array("id" => 1, "parent_id" => 0);    $tasks[] = array("id" => 2, "parent_id" => 5);    $tasks[] = array("id" => 3, "parent_id" => 2);    $tasks[] = array("id" => 5, "parent_id" => 3);    $tasks[] = array("id" => 4, "parent_id" => 3);    $tasks[] = array("id" => 6, "parent_id" => 5);    $tasks[] = array("id" => 7, "parent_id" => 6);    $tree = buildTree($tasks);    print("<pre>");print_r($tree);}function buildTree(array $elements, $parentId = 0) {    $branch = array();    foreach ($elements as $element) {        if ($element['parent_id'] == $parentId) {            $children = buildTree($elements, $element['id']);            if ($children) {                $element['children'] = $children;            }            $branch[] = $element;        }    }    return $branch;}
查看完整描述

1 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

为了避免无限循环的错误,当某些元素的子元素具有 parent_id 时,您可以使用第三个参数来列出所有已管理的 id。如果一个 id 在你的治疗中回来,你可以抛出一个异常:


function buildTree(array $elements, $parentId = 0, $managedParent = []) {

    $branch = array();


    // Add new id in list of managed ids

    $managedParent[] =$parentId;


    foreach ($elements as $element) {


        if ($element['parent_id'] == $parentId) {


          // check id not already managed

          if(in_array($element['id'], $managedParent))

          {

            // in this case children are already a parent of same structure. Throw an Excpetion

            throw new \Exception('Invalid structure given');

          }


          $children = buildTree($elements, $element['id'], $managedParent);

          if ($children) {

              $element['children'] = $children;

          }

          $branch[] = $element;

        }

    }


    return $branch;

}


查看完整回答
反对 回复 2022-06-11
  • 1 回答
  • 0 关注
  • 76 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号