字符串的这样的
0182,1,51|0183,96,7280|0184,1,241|0185,1,1|0187,1,241|0182,1,51|0183,96,7280|0184,1,241|0185,1,1|0187,1,241|0182,1,51|要求:
第一步:以"|"拆分 后得
0182,1,51
0183,96,7280
0184,1,241
0185,1,1
0187,1,241
0182,1,51
... ...第二步:按第一列找出相同项,去出多余的,再将相同项的后两项分别相加 如0182,2,102
0183,96,7280
0184,1,241
0185,1,1
0187,1,241
... ...
第三步:可按照后两列分别排序 如按第二列重大到小:
0183,96,7280
0182,2,102
0184,1,241
0185,1,1
0187,1,241
... ...
0182,1,51|0183,96,7280|0184,1,241|0185,1,1|0187,1,241|0182,1,51|0183,96,7280|0184,1,241|0185,1,1|0187,1,241|0182,1,51|要求:
第一步:以"|"拆分 后得
0182,1,51
0183,96,7280
0184,1,241
0185,1,1
0187,1,241
0182,1,51
... ...第二步:按第一列找出相同项,去出多余的,再将相同项的后两项分别相加 如0182,2,102
0183,96,7280
0184,1,241
0185,1,1
0187,1,241
... ...
第三步:可按照后两列分别排序 如按第二列重大到小:
0183,96,7280
0182,2,102
0184,1,241
0185,1,1
0187,1,241
... ...
array_intersect_assoc()
array_unique()//这个不一定用到
array_sum()
ksort()/krsort()/sort()...利用数组间的差、并、交集等计算第二步,可以避免循环
另一种方法是match之后用循环完成后两步
foreach(explode('|', $s) as $row) {
$tmp = explode(',', $row);
$ar[$tmp[0]][0] += $tmp[1];
$ar[$tmp[0]][1] += $tmp[2];
}//排序
foreach($ar as $v) {
$p[] = $v[0];
}
array_multisort($p, SORT_DESC, $ar);//输出
foreach($ar as $k=>$v) {
echo "$k,$v[0],$v[1]<br>";
}
foreach(explode('|', $s) as $row) {
$tmp = explode(',', $row);
$ar[$tmp[0]][0] += $tmp[1]; //请问唠叨,这两句的思想是什么呀?
$ar[$tmp[0]][1] += $tmp[2]; //哪位解释一下呐?
}//排序
foreach($ar as $v) {
$p[] = $v[0];
}
array_multisort($p, SORT_DESC, $ar);//输出
foreach($ar as $k=>$v) {
echo "$k,$v[0],$v[1]<br>";
}