我要从一个无限分类数组中取出一段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;
}
?>
<?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;
}
?>
$idstr = array_filter($GLOBALS['data'],create_function('$a', 'return !strcmp($a[fid],'.$id.');'));
return $idstr;
}
function genlistid($data,$id){
foreach ($data as $arr){
if((int)$arr['id'] > $id) ($tmp[] = $arr);
return $tmp;
}
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;
}
大致是一个思路,当然方法肯定很多,你自己多想想。代码不一定可以运行,希望你看得懂。
$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
))
Array ( [0] => Array ( [id] => 6 [fid] => 2 ) [1] => Array ( [id] => 7 [fid] => 6 ) )