本身数组就错了,PHP可以定义[0] => Array的格式吗????

解决方案 »

  1.   

    function foo($ar, $pid=0) {
      foreach($ar as $v) {
        if($v['pid'] == $pid) return $v;
        if($t = foo($v['child'], $pid)) return $t;
      }
      return false;
    }print_r(foo($d, 2)); //提取pid=2的节点极其字节点其实按原生成算法。只需将
    if($v[pid] == 0) {
    中的0换成所需的pid就可直接生成了
    因为你提供的这种结构的数组是不易保存在数据库中的,实际保存在数据库中的是二维平面结构
      

  2.   

    唠叨老大您的这个函数当pid=0的时候似乎也不对,没有把全部的pid=0的内容取出来.
      

  3.   

    这个数组换成xml会好弄一些吧
      

  4.   

    这样似乎就可以了.
    function foo($ar, $pid=0) {
      foreach($ar as $v) {
        if($v['pid'] == $pid) return $v;
        if($t = foo($v['child'], $pid)) return $t;
      }
      return false;
    }
    //下面的函数取得指定pid的值,同时调用foo函数
    function fo($ar, $pid=0) {
    $d=array();
    $i=0;
      foreach($ar as $v) {
        if($v['pid'] == $pid) $d[$i++]=$v;
        elseif($t = foo($v['child'], $pid))  $d[$i++]=$t;
      }
      return $d;
    }
      

  5.   

    当$pid=0时就是原数组了,有必要取子吗?function foo($ar, $pid=0) {
      if($pid==0) return $ar;
      foreach($ar as $v) {
        if($v['pid'] == $pid) return $v;
        if($t = foo($v['child'], $pid)) return $t;
      }
      return false;
    }编程不存在固定的模式,关键在于你的思维方式
      

  6.   

    您的函数没有全部取出来
    print_r(foo($ar, 1)); //提取pid=1的节点极其字节点这个只取了一部分的pid=1的节点.
      

  7.   

    增加一个索引书组。
    [父id]={子id1,id2,id3}