$aa =Array(
[R,99] => B [I,100] => A [A,101] => D [S,102] => C [E,103] => D [C,104] => B [R,105] => A );
$cc = array( "A" =>"1", "B" => "2", "C" => "3", "D" => "4", "E" => "5", "F" => "6", "G" => "7", );
需求:::將aa數組里面的 r=b,然后匹配cc數組里面的值,b對應的值為2,如果aa里面有兩個r那么將他們的值相加
$str ="";
foreach ($aa as $key => $v) {
$kk = substr($key,0,1);
$str .= substr($key,0,1)."=".$cc[$v].",";
}
得到 str=' R=2,I=1,A=4,S=3,E=4,C=2,R=1';
然后將str這個字符串處理成
Array
(
[R] => 3
[I] => 1
[A] => 4
[S] => 3
[E] => 4
[C] => 2
)
這種格式,:注意,這里拼接數組的時候,鍵名如果相同會被替換,需求是,如果鍵名相同,則鍵值相加
思路:
先將str以逗號打散成數組
Array
(
[0] => R=2
[1] => I=1
[2] => A=4
[3] => S=3
[4] => E=4
[5] => C=2
[6] => R=1
)
循環這個數組,然后再循環里再將新數組的值,再次以=打散成新數組,
Array
(
[0] => R
[1] => 2
)
Array
(
[0] => I
[1] => 1
)
Array
(
[0] => A
[1] => 4
)
Array
(
[0] => S
[1] => 3
)
Array
(
[0] => E
[1] => 4
)
Array
(
[0] => C
[1] => 2
)
Array
(
[0] => R
[1] => 1
)
然后將新數組的0下標的值作為鍵名組成新數組,如果鍵名相同,鍵值相加,否則不用
代碼:
$str = rtrim($str,","); $arr1 = explode(',',$str); $arr2 =[]; foreach ($arr1 as $k => $va) { $arr3 = explode('=',$va); aaa($arr3); if(isset($arr2[$arr3[0]])) { $arr2[$arr3[0]] += $arr3[1]; }else{ $arr2[$arr3[0]] = $arr3[1]; } }
function aaa($ccd){
echo "<pre>";
print_R($ccd);
echo "</pre>";
}
優化思路:不用再拼接字符串,直接判斷相加
$aa = Array
(
[R,99] => B
[I,100] => A
[A,101] => D
[S,102] => C
[E,103] => D
[C,104] => B
[R,105] => A
);
$cc = Array
(
[A] => 1
[B] => 2
[C] => 3
[D] => 4
[E] => 5
[F] => 6
[G] => 7
);
$arr5 = [];
foreach ($aa as $key => $v) {
$kk = substr($key,0,1);
if(isset($arr5[$kk])){//如果鍵名存在,吧值相加
$arr5[$kk] += $cc[$v];
}else{
$arr5[$kk] = $cc[$v];
}
}
