模拟数据表
catid(目录ID) upid(上级目录ID) num(值全部为1)
1 0 (0无上层目录) 1
2 0 1
3 0
4 1 (上层目录ID号为1)
5 1
6 2 (上层目录ID号为2)
7 4 (上层目录ID号为4)
8 7 (上层目录ID号为7)
9 5 (上层目录ID号为5)
意思就是计算出 每个目录下所有子目录的num总数 和每个子目录下的num总数 需要得到的结果
catid 1 得到 6
catid 2 得到 2
3 1
4 2
5 2
6 1
7 2
8 1
9 1
catid(目录ID) upid(上级目录ID) num(值全部为1)
1 0 (0无上层目录) 1
2 0 1
3 0
4 1 (上层目录ID号为1)
5 1
6 2 (上层目录ID号为2)
7 4 (上层目录ID号为4)
8 7 (上层目录ID号为7)
9 5 (上层目录ID号为5)
意思就是计算出 每个目录下所有子目录的num总数 和每个子目录下的num总数 需要得到的结果
catid 1 得到 6
catid 2 得到 2
3 1
4 2
5 2
6 1
7 2
8 1
9 1
#2、#3、#4 的回复是不负责任的!我给个很另类的解法,供参考(绝不使用递归)
$ar = array (
1 => array ( 'catid' => '1', 'uid' => '0', 'num' => 1 ),
2 => array ( 'catid' => '2', 'uid' => '0', 'num' => 1 ),
3 => array ( 'catid' => '3', 'uid' => '0', 'num' => 1 ),
4 => array ( 'catid' => '4', 'uid' => '1', 'num' => 1 ),
5 => array ( 'catid' => '5', 'uid' => '1', 'num' => 1 ),
6 => array ( 'catid' => '6', 'uid' => '2', 'num' => 1 ),
7 => array ( 'catid' => '7', 'uid' => '4', 'num' => 1 ),
8 => array ( 'catid' => '8', 'uid' => '7', 'num' => 1 ),
9 => array ( 'catid' => '9', 'uid' => '5', 'num' => 1 ),
);function create_child($ar, $id='id', $pid='pid') {
foreach ($ar as $k => $item){
if( $item[$pid] ) {
$ar[$item[$pid]]['child'][$item[$id]] =& $ar[$k];
}
}
return $ar;
}foreach(create_child($ar, 'catid', 'uid') as $k=>$v) {
preg_match_all('/"num";i:(\d+)/', serialize($v), $r);
$ar[$k]['num'] = array_sum($r[1]);
}print_r($ar);Array
(
[1] => Array
(
[catid] => 1
[uid] => 0
[num] => 6
) [2] => Array
(
[catid] => 2
[uid] => 0
[num] => 2
) [3] => Array
(
[catid] => 3
[uid] => 0
[num] => 1
) [4] => Array
(
[catid] => 4
[uid] => 1
[num] => 3
) [5] => Array
(
[catid] => 5
[uid] => 1
[num] => 2
) [6] => Array
(
[catid] => 6
[uid] => 2
[num] => 1
) [7] => Array
(
[catid] => 7
[uid] => 4
[num] => 2
) [8] => Array
(
[catid] => 8
[uid] => 7
[num] => 1
) [9] => Array
(
[catid] => 9
[uid] => 5
[num] => 1
))
//catid作为数组key
$ar = array (
1 => array ( 'catid' => '1', 'uid' => '0', 'num' => 1 ),
2 => array ( 'catid' => '2', 'uid' => '0', 'num' => 1 ),
3 => array ( 'catid' => '3', 'uid' => '0', 'num' => 1 ),
4 => array ( 'catid' => '4', 'uid' => '1', 'num' => 1 ),
5 => array ( 'catid' => '5', 'uid' => '1', 'num' => 1 ),
6 => array ( 'catid' => '6', 'uid' => '2', 'num' => 1 ),
7 => array ( 'catid' => '7', 'uid' => '4', 'num' => 1 ),
8 => array ( 'catid' => '8', 'uid' => '7', 'num' => 1 ),
9 => array ( 'catid' => '9', 'uid' => '5', 'num' => 1 ),
);
foreach( $ar as $k=>$v)
{
$o = $v['uid'];
while(isset($ar[$o]))
{
$ar[$o]['num'] += $v['num'];
$o = $ar[$o]['uid'];
}
}print_r( $ar );
array ( 'catid' => '1', 'uid' => '0', 'num' => 1 ),
array ( 'catid' => '2', 'uid' => '0', 'num' => 1 ),
array ( 'catid' => '3', 'uid' => '0', 'num' => 1 ),
array ( 'catid' => '4', 'uid' => '1', 'num' => 1 ),
array ( 'catid' => '5', 'uid' => '1', 'num' => 1 ),
array ( 'catid' => '6', 'uid' => '2', 'num' => 1 ),
array ( 'catid' => '7', 'uid' => '4', 'num' => 1 ),
array ( 'catid' => '8', 'uid' => '7', 'num' => 1 ),
array ( 'catid' => '9', 'uid' => '5', 'num' => 1 ),
);$count = $arID_UID = array();
foreach($ar as $k => $v) $arID_UID[$v['catid']] = $v['uid'];foreach($ar as $k => $v) {
$count[$v['catid']] += $v['num'];
$tmp = $v['uid'];
while($tmp) {
$count[$tmp] += $v['num'];
$tmp = $arID_UID[$tmp];
}
}
print_r($count);//output
Array
(
[1] => 6
[2] => 2
[3] => 1
[4] => 3
[5] => 2
[6] => 1
[7] => 2
[8] => 1
[9] => 1
)
严重同意这句话话……,,,,,还可以用冗余字段记录全部父级关系,如果实现类似统计结果,也是非常容易的,为了以示区别,增加parent_ids,【】例如$ar = array (
1 => array ( 'catid' => '1', 'parent_ids' => '', 'num' => 1 ),
2 => array ( 'catid' => '2', 'parent_ids' => '', 'num' => 1 ),
3 => array ( 'catid' => '3', 'parent_ids' => '', 'num' => 1 ),
4 => array ( 'catid' => '4', 'parent_ids' => '1', 'num' => 1 ),
5 => array ( 'catid' => '5', 'parent_ids' => '1', 'num' => 1 ),
6 => array ( 'catid' => '6', 'parent_ids' => '2', 'num' => 1 ),
7 => array ( 'catid' => '7', 'parent_ids' => '1,4', 'num' => 1 ),
8 => array ( 'catid' => '8', 'parent_ids' => '1,4,7', 'num' => 1 ),
9 => array ( 'catid' => '9', 'parent_ids' => '1,5', 'num' => 1 ),
);
楼主我想问一句:意思就是计算出 每个目录下所有子目录的num总数 和每个子目录下的num总数
前半句好理解,后半句和每个子目录下的num总数 里的子目录下的num总数做何意思?子目录下的文件还是继续子目录或者num?这里我第一个想到的是子目录,但是子目录num又何意思,总数吗,就算是,那么还有就那几个数据真的看不出个道道来,可能是我太笨了!看来回头我应该多写几编记叙文多练练手,最好能写出类似我的XXX,即使有上下文,我也要让人根本不知道我在说什么,多提高一下我的语文表达能力!哈哈!
$ar = array (
1 => array ( 'catid' => '1', 'uid' => '0', 'num' => 1 ),
2 => array ( 'catid' => '2', 'uid' => '0', 'num' => 1 ),
3 => array ( 'catid' => '3', 'uid' => '0', 'num' => 1 ),
4 => array ( 'catid' => '4', 'uid' => '1', 'num' => 1 ),
5 => array ( 'catid' => '5', 'uid' => '1', 'num' => 1 ),
6 => array ( 'catid' => '6', 'uid' => '2', 'num' => 1 ),
7 => array ( 'catid' => '7', 'uid' => '4', 'num' => 1 ),
8 => array ( 'catid' => '8', 'uid' => '7', 'num' => 1 ),
9 => array ( 'catid' => '9', 'uid' => '5', 'num' => 1 ),
);
function searchid($id,$ar,$num){
global $num;
foreach($ar as $value){
if($id==$value['uid']){
$num++;
searchid($value['catid'],$ar,$num);
}
}
return $num;
}
foreach($ar as $value){
$num=1;
echo $value['catid']."=>".searchid($value['catid'],$ar,$num)."<br>";
}
?>只想到这个。
1 => array ( 'catid' => '1', 'uid' => '0', 'num' => 1 ),
2 => array ( 'catid' => '2', 'uid' => '0', 'num' => 1 ),
3 => array ( 'catid' => '3', 'uid' => '0', 'num' => 1 ),
4 => array ( 'catid' => '4', 'uid' => '1', 'num' => 1 ),
5 => array ( 'catid' => '5', 'uid' => '1', 'num' => 1 ),
6 => array ( 'catid' => '6', 'uid' => '2', 'num' => 1 ),
7 => array ( 'catid' => '7', 'uid' => '4', 'num' => 1 ),
8 => array ( 'catid' => '8', 'uid' => '7', 'num' => 1 ),
9 => array ( 'catid' => '9', 'uid' => '5', 'num' => 1 ),
);function searchid($id,$ar,$num){
foreach($ar as $value){
if($id==$value['uid']){
$num++;
$num=searchid($value['catid'],$ar,$num);
}
}
return $num;
}foreach($ar as $value){
$num=1;
echo $value['catid']."=>".searchid($value['catid'],$ar,$num)."<br>";
}?>
这个也许好点。