正文开始 <pre style="background-color:#2b2b2b;color:#a9b7c6;font-family:'宋体';font-size:8.4pt;"><?php
$data = [
[
'uid'=> 111,
'fid'=> 11,
'score'=> 3
],
[
'uid'=> 11,
'fid'=> 1,
'score'=> 1
],
[
'uid'=> 1,
'fid'=> 0,
'score'=> 0
],
[
'uid'=> 2,
'fid'=> 0,
'score'=> 0
],
[
'uid'=> 21,
'fid'=> 2,
'score'=> 2
],
[
'uid'=> 22,
'fid'=> 21,
'score'=> 33
]
];
function diguiArray($array, $pid=0, $sonName = 'sons', $parentName = 'parent_id', $idName = 's_id'){
if(!$array) return [];
$newList = array();
//生成所有父级数据
$allParentData = []; //所有父级数据
foreach($array as $k=>$v){
$allParentData[$v[$parentName]][] = $v;
}
//获取子数据
$getSonData = function ($parentData=[]) use($sonName, $parentName, $idName, $allParentData, &$getSonData) {
$tmpSonList = array();
foreach($parentData as $k=>$v){
$pid_ = $v[$idName];
// print_r($parentDataGlobal[$pid_]);exit;
if(isset($allParentData[$pid_])) {
$v[$sonName] = $getSonData($allParentData[$pid_]);
}
$tmpSonList[]=$v;
}
return $tmpSonList;
};
//只遍历所有父级
foreach($allParentData[$pid] as $k=>$v){
$pid_ = $v[$idName];
// print_r($parentDataGlobal[$pid_]);exit;
if(isset($allParentData[$pid_])) {
$v[$sonName] = $getSonData($allParentData[$pid_]);
}
$newList[]=$v;
}
return $newList;
}
$data2 = diguiArray($data, 0, 'sons', 'fid', 'uid');
//求单个item的总分
function sumScore($datum_) {
if(isset($datum_['sons']) && count($datum_['sons']) > 0 ) {
$count_ = 0;
foreach ($datum_['sons'] as $datum__) {
//如果子还有子 继续递归求和 否则 直接求子的和
$count_ += $datum__['score'];
if(isset($datum__['sons']) && count($datum__['sons']) > 0 ) {
$count_ += sumScore($datum__);
}
}
return $count_;
} else {
return 0;
}
}
foreach ($data2 as &$datum) {
$datum['score'] = sumScore($datum);
}
print_r($data2);
</pre><p>结果:</p><p><br /></p><p><pre>Array
(
[0] => Array
(
[uid] => 1
[fid] => 0
[score] => 4
[sons] => Array
(
[0] => Array
(
[uid] => 11
[fid] => 1
[score] => 1
[sons] => Array
(
[0] => Array
(
[uid] => 111
[fid] => 11
[score] => 3
)
)
)
)
)
[1] => Array
(
[uid] => 2
[fid] => 0
[score] => 35
[sons] => Array
(
[0] => Array
(
[uid] => 21
[fid] => 2
[score] => 2
[sons] => Array
(
[0] => Array
(
[uid] => 22
[fid] => 21
[score] => 33
)
)
)
)
)
)
</pre> <br /></p>
正文结束 |
PHP接口(interface)和抽象类(abstract) | zencart 使用paypal支付 报错unable to get local issuer certificate |