$arr=array( array('id'=>1,'P_ID'=>'0','name'=>'php新闻'), array('id'=>3,'P_ID'=>'1','name'=>'asp新闻'), array('id'=>2,'P_ID'=>'2','name'=>'java新闻'),array('id'=>5,'P_ID'=>'0','name'=>'linux新闻') );现求一个函数,能根据传入的P_ID值分别取出元素来放到一个新的数组当中去,比如我传入P_ID=0,则取出arr[0]和arr[3]组成一个新的数组,各位前辈有什么好办法?谢谢了!  还有为什么我下面这个函数不行啊。哪里错了!请求高手解答!          function getNode($pt=0) {
            for ($i = 0; $i < count($arr); $i++) {
             if($arr[$i]["P_ID"]=$pt){
                 $row[]=$arr[$i];
                
             }
            }  
            return $row;
          }
         
    print_r(getNode());

解决方案 »

  1.   

    你的那个函数getNode()里面的$row是哪里来的???
    <?php$arr=array(
    array('id'=> 1,'P_ID'=>'0','name'=>'php新闻'),
    array('id'=> 3,'P_ID'=>'1','name'=>'asp新闻'),
    array('id'=> 2,'P_ID'=>'2','name'=>'java新闻'),
    array('id'=> 5,'P_ID'=>'0','name'=>'linux新闻')
    );/*
    现求一个函数,能根据传入的P_ID值分别取出元素来放到一个新的数组当中去,
    比如我传入P_ID=0,则取出arr[0]和arr[3]组成一个新的数组,各位前辈有什么好办法?谢谢了!
    还有为什么我下面这个函数不行啊。哪里错了!请求高手解答!
    */          function getNode($pt=0) {
                global $arr;
                $array  = array();
                $length = count($arr);
                if ($pt < $length) {
                 $array = $arr[$pt];
                 $pt += 3;
                 if($pt < $length) $array = array_merge($array,$arr[$pt]);
                }
                return $array;
              }
        print_r(getNode());
    /*Array
    (
        [id] => 5
        [P_ID] => 0
        [name] => linux新闻
    )*/
      

  2.   

    你的代码有两处问题:
    1、if($arr[$i]["P_ID"]=$pt){应更改为if($arr[$i]["P_ID"]==$pt){
    2、$arr在函数作用域中不可见,因此要global $arr,即:
    function getNode($pt = 0) {
    global $arr;
    for ($i = 0; $i < count($arr); $i++) {
    if ($arr[$i]["P_ID"] == $pt) {
    $row[] = $arr[$i];  
    }
    }  
    return $row;
    }
     
    print_r(getNode());
      

  3.   


     现在明白楼主的意思了。function getNode($pt = 0) {
        global $arr;
        $row = array();
        for ($i = 0; $i < count($arr); $i++) {
            if ($arr[$i]["P_ID"] == $pt) {
                $row[] = $arr[$i];         
            }
        }  
        return $row;
    }
     
    print_r(getNode());
      

  4.   


    注意=是赋值,两个==才是判断是否相等,修改为:
            function getNode($pt=0) {
                      for ($i = 0; $i < count($arr); $i++) {
                          if($arr[$i]["P_ID"]=$pt){
                              $row[]==$arr[$i];
                             
                          }
                      }  
                      return $row;
              }
             
        print_r(getNode());
      

  5.   

    谢谢各位,我的数组键名是数字,$arr[$i]["1"]==$pt 这样访问怎么就打印不出任何效果呢?难道一定要是关联数组吗?继续请教各位前辈!
      

  6.   


    function getNode($pt=0) {
                global $arr;
                $array  = array();
    foreach($arr as $vo){
    if($vo["P_ID"]==$pt){
    $array = array_merge($array,$arr[$pt]);
    }
    }
                return $array;
    }
      

  7.   

      我的数组打印出来是这样的:
     Array
    (
        [0] => Array
            (
                [0] => 1
                [1] => 0
                [2] => 新闻相册
                [3] => news
                [4] => 新闻图片
                [5] => 一些新闻图片
                [6] => 1
                [7] => xw
                [8] => 23
                [9] => 1
                [10] => 25
                [11] => 2011-01-13
                [12] => ss
                [13] => 0000-00-00
                [14] => 
            )    [1] => Array
            (
                [0] => 2
                [1] => 0
                [2] => 娱乐相册
                [3] => aa
                [4] => 娱乐图片
                [5] => 一些娱乐图片
                [6] => 1
                [7] => yl
                [8] => 22
                [9] => 1
                [10] => 11
                [11] => 2011-01-18
                [12] => aa
                [13] => 0000-00-00
                [14] => 
            )    [2] => Array
            (
                [0] => 9
                [1] => 2
                [2] => 体育相册
                [3] => 
                [4] => sport
                [5] => sport photo
                [6] => 1
                [7] => sport
                [8] => 0
                [9] => 2
                [10] => 0
                [11] => 2011-02-10
                [12] => ss
                [13] => 0000-00-00
                [14] => 
            )    [3] => Array
            (
                [0] => 10
                [1] => 1
                [2] => linux相册
                [3] => DD
                [4] => DD
                [5] => DD
                [6] => 1
                [7] => DD
                [8] => 0
                [9] => 0
                [10] => 0
                [11] => 2011-02-09
                [12] => DD
                [13] => 0000-00-00
                [14] => 
            ))请求各位前辈解答!谢谢!
      

  8.   


    /*如果你说的是这个意思的话,那就是这样了*/
    $arr=array(
    array(1=> 1,2=>'0',3=>'php新闻'),
    array(1=> 3,2=>'1',3=>'asp新闻'),
    array(1=> 2,2=>'2',3=>'java新闻'),
    array(1=> 5,2=>'0',3=>'linux新闻')
    );
    function getNode($pt=0){
    global $arr;
    $array  = array();
    foreach($arr as $vo){if($vo[2]==$pt){
    $array = array_merge($array,$vo);
    }
    }
    return $array;}
        print_r(getNode());
      

  9.   


    function getNode($arr,$pt=1,$i=1){
    $array  = array();
    foreach($arr as $val){
    if($val[$i]==$pt){
    $array[] =$val;
    }
    }
    return $array;
    }
        print_r(getNode($arr));
      

  10.   

    刚查了一下api
    你这个不能用array_merge
    因为你这会出现多个键名相同
    用array_merge的话后边的会覆盖前边的