如何用迭代方式取出层次分明的数组(即多维数组)?

原创
2016-07-06 13:52:23 729浏览

我想要这种效果,用迭代的方式

我现在是这种效果,如何让取出来的数组具有层级?

目前的代码,如何修改?或者给个思路也行

//迭代调用子孙树
function node_merge($node,$access,$parent = 0){
    $task = array($parent) ; //任务表
    $arr = array(); //返回数据
    while (!empty($task)) {
        $flag = false; //声明标识符
        foreach ($node as $k=> $v) {

            if($v['pid'] == $parent){
                if (isset($node[$parent])) {
                    $arr[] = $v;
                }
                // $arr[] = $v; //将找到的栏目存进$arr,等待返回
                array_push($task, $v['id']);//将最新的地区存入任务栈,只要task还有任务,循环会继续.
                $parent = $v['id'];//将当前id存入$parent
                unset($node[$k]); //把找到的单元unset掉

                $flag = true; //说明找到了子栏目

            }

        
    }
        //如果flsg为false,就代表找不到已找不到子栏目了,可以将最后的单元pop掉然后继续循环了.
        if ($flag == false) {
            array_pop($task); //弹出任务表
                $parent = end($task); //把找到的单元unset掉
            }
        
    }
    
    return $arr;
}

回复内容:

我想要这种效果,用迭代的方式

我现在是这种效果,如何让取出来的数组具有层级?

目前的代码,如何修改?或者给个思路也行

//迭代调用子孙树
function node_merge($node,$access,$parent = 0){
    $task = array($parent) ; //任务表
    $arr = array(); //返回数据
    while (!empty($task)) {
        $flag = false; //声明标识符
        foreach ($node as $k=> $v) {

            if($v['pid'] == $parent){
                if (isset($node[$parent])) {
                    $arr[] = $v;
                }
                // $arr[] = $v; //将找到的栏目存进$arr,等待返回
                array_push($task, $v['id']);//将最新的地区存入任务栈,只要task还有任务,循环会继续.
                $parent = $v['id'];//将当前id存入$parent
                unset($node[$k]); //把找到的单元unset掉

                $flag = true; //说明找到了子栏目

            }

        
    }
        //如果flsg为false,就代表找不到已找不到子栏目了,可以将最后的单元pop掉然后继续循环了.
        if ($flag == false) {
            array_pop($task); //弹出任务表
                $parent = end($task); //把找到的单元unset掉
            }
        
    }
    
    return $arr;
}

應該是不用這麼複雜~
用遞歸可以很簡單達成這樣任務:

遞歸

function parseTree($tree, $root = null) {
    $nested = array();
    foreach($tree as $index => $child) {
        if($child['pid'] == $root) {
            unset($tree[$index]);
            $child['children'] = parseTree($tree, $child['id']);
            $nested[] = $child;
        }
    }
    return empty($nested) ? null : $nested;
}

迭代

function parseTree($rows) {
  $rows = array_column ( $rows, null, 'id' );
  foreach ( $rows as $key => $val ) {
      if ( $val ['pid'] ) {
          if ( isset ( $rows [$val ['pid']] )) {
              $rows [$val ['pid']]['children'][] = &$rows [$key];
          }
      }
  }

  foreach ( $rows as $key => $val ) {
      if ( $val ['pid'] ) unset ( $rows [$key] );
  }

  return $rows;
}
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。