我要从一个无限分类数组中取出一段id值,想构造一个函数;id=6 如何取出6以下的所有id!
<?php
$data[] = array('id' => 1, 'fid' => 0);
$data[] = array('id' => 2, 'fid' => 0);
$data[] = array('id' => 3, 'fid' => 1);
$data[] = array('id' => 4, 'fid' => 2);
$data[] = array('id' => 5, 'fid' => 2);
$data[] = array('id' => 6, 'fid' => 2);
$data[] = array('id' => 7, 'fid' => 6);
$data[] = array('id' => 8, 'fid' => 6);
$data[] = array('id' => 9, 'fid' => 8);
$data[] = array('id' => 10, 'fid' => 1);
$data[] = array('id' => 11, 'fid' => 1);
$data[] = array('id' => 12, 'fid' => 10);
$data[] = array('id' => 13, 'fid' => 9);function genlistid($id=0){
     
    .......//这地不知道怎么写
    return $idstr;
 }
?>

解决方案 »

  1.   

    function genlistid($id=0){ 
        
        $idstr = array_filter($GLOBALS['data'],create_function('$a', 'return !strcmp($a[fid],'.$id.');'));
        return $idstr; 
    }
      

  2.   


    function genlistid($data,$id){
    foreach ($data as $arr){
    if((int)$arr['id'] > $id) ($tmp[] = $arr);
    return $tmp;
    }
      

  3.   

    // 假设你的数据是按ID排序好的
    function genlistid($id=0){ 
        $tmpArr = array();
    foreach ($data as $arr) {
        if ($arr['id'] < $id)
            $tmpArr[] = $arr['id'];
        else
            break;
    }$newArr = array();
        foreach ($data as $arr){
            if(in_array($arr['id'], $tmpArr) || in_array($arr['fid'], $tmpArr)) {
                 if ($arr['fid'] > $id)
                    $tmpArr[]=$arr['fid'];
                 continue;
            }
            $newArr[]=$arr;
        }
            return $newArr; 

    大致是一个思路,当然方法肯定很多,你自己多想想。代码不一定可以运行,希望你看得懂。
      

  4.   

    $data[] = array('id' => 1, 'fid' => 0);
    $data[] = array('id' => 2, 'fid' => 0);
    $data[] = array('id' => 3, 'fid' => 1);
    $data[] = array('id' => 4, 'fid' => 2);
    $data[] = array('id' => 5, 'fid' => 2);
    $data[] = array('id' => 6, 'fid' => 2);
    $data[] = array('id' => 7, 'fid' => 6);
    $data[] = array('id' => 8, 'fid' => 6);
    $data[] = array('id' => 9, 'fid' => 8);
    $data[] = array('id' => 10, 'fid' => 1);
    $data[] = array('id' => 11, 'fid' => 1);
    $data[] = array('id' => 12, 'fid' => 10);
    $data[] = array('id' => 13, 'fid' => 9);function genlistid($id=0){
      global $data;
      $r = array();
      foreach($data as $v) {
        if($id == $v['id']) {
           $r[] = $v;
        }else if($id == $v['fid']) {
         $r = array_merge($r, genlistid($v['id']));
        }
      }
      return $r;
    }print_r(genlistid(6));
    Array
    (
        [0] => Array
            (
                [id] => 6
                [fid] => 2
            )    [1] => Array
            (
                [id] => 7
                [fid] => 6
            )    [2] => Array
            (
                [id] => 8
                [fid] => 6
            )    [3] => Array
            (
                [id] => 9
                [fid] => 8
            )    [4] => Array
            (
                [id] => 13
                [fid] => 9
            ))
      

  5.   

    我的机器上传出的值还是不对!
    Array ( [0] => Array ( [id] => 6 [fid] => 2 ) [1] => Array ( [id] => 7 [fid] => 6 ) )