Heim >Backend-Entwicklung >PHP-Tutorial >如何用迭代方式取出层次分明的数组(即多维数组)?

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

WBOY
WBOYOriginal
2016-07-06 13:52:231009Durchsuche

我想要这种效果,用迭代的方式如何用迭代方式取出层次分明的数组(即多维数组)?

我现在是这种效果,如何让取出来的数组具有层级?
如何用迭代方式取出层次分明的数组(即多维数组)?

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

<code>//迭代调用子孙树
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;
}
</code>

回复内容:

我想要这种效果,用迭代的方式如何用迭代方式取出层次分明的数组(即多维数组)?

我现在是这种效果,如何让取出来的数组具有层级?
如何用迭代方式取出层次分明的数组(即多维数组)?

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

<code>//迭代调用子孙树
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;
}
</code>

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

遞歸

<code class="php">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;
}</code>

迭代

<code class="php">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;
}</code>
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn