$a=array(1=>array{"name"=>"张三", "score"=>"7"},
2=>array{"name"=>"李四", "score"=>"3"},
3=>array{"name"=>"王五", "score"=>"6"},
4=>array{"name"=>"刘六", "score"=>"9"},
5=>array{"name"=>"张三", "score"=>"2"},
6=>array{"name"=>"李四", "score"=>"8"}
);
比如我现在有这样一个数组,我想做到张三李四的score都叠加,去掉重复项目,然后按score在递减排序该怎么弄?最终变成类似于这样$a=array(1=>array{"name"=>"李四", "score"=>"11"},
2=>array{"name"=>"张三", "score"=>"9"},
3=>array{"name"=>"刘六", "score"=>"9"},
4=>array{"name"=>"王五", "score"=>"6"}
);
排序
function orderScore($x,$y)
{
if($x['score']==$y['score']){return 0;}
if($x['score']>$y['score']){return 1;}
if($x['score']<$y['score']){return -1;}
}
ursort($a,'orderScore');我的思路,不知道对不对。、
2=>array("name"=>"李四", "score"=>"3"),
3=>array("name"=>"王五", "score"=>"6"),
4=>array("name"=>"刘六", "score"=>"9"),
5=>array("name"=>"张三", "score"=>"2"),
6=>array("name"=>"李四", "score"=>"8")
);$r = array();
foreach($a as $v) {
if(isset($r[$v['name']])) $r[$v['name']]['score'] += $v['score'];
else $r[$v['name']] = $v;
}
print_r($r);
Array
(
[张三] => Array
(
[name] => 张三
[score] => 9
) [李四] => Array
(
[name] => 李四
[score] => 11
) [王五] => Array
(
[name] => 王五
[score] => 6
) [刘六] => Array
(
[name] => 刘六
[score] => 9
))
$a=array(1=>array("name"=>"张三", "score"=>"7"),
2=>array("name"=>"李四", "score"=>"3"),
3=>array("name"=>"王五", "score"=>"6"),
4=>array("name"=>"刘六", "score"=>"9"),
5=>array("name"=>"张三", "score"=>"2"),
6=>array("name"=>"李四", "score"=>"8")
);
$count = count($a);$r = array();//新数组用来存入a的值foreach($a as $v) {
if(isset($r[$v['name']])) $r[$v['name']]['score'] += $v['score'];
else $r[$v['name']] = $v;
}$a = $r;function orderScore($x,$y)
{
if($x['score']==$y['score']){return 0;}
if($x['score']>$y['score']){return -1;}
if($x['score']<$y['score']){return 1;}
}
usort($a,'orderScore');
print_r($a);
?> 借用二楼的方法,高手很多啊,鸭梨很大。。
完整代码.....