我有两个数组,
$arr_1 = array(01=>5, 02=>3, 03=>2);
$arr_2 = array(01=>3, 02=>4, 03=>0);
我想要实现的是有一个数组,添加两个数组后的最终形式是,
$arr_3 = array(01=>8, 02=>7, 03=>2);
我试过array_merge
了,但这不是解决方案。我将如何获得最终形式?
尝试array_map。来自 PHP 手册
array_map() 将回调函数应用于每个元素后,返回一个包含 arr1 的所有元素的数组。回调函数接受的参数数量应与传递给 array_map() 的数组数量相匹配
$arr_1 = array(01=>5, 02=>3, 03=>2);
$arr_2 = array(01=>3, 02=>4, 03=>0);
$arr_3 = array_map('add', $arr_1, $arr_2);
function add($ar1, $ar2){
return $ar1+$ar2;
}
print_r($arr_3);
输出:
Array ( [0] => 8 [1] => 7 [2] => 2 )
一个for
循环应该处理这个:
$max = count($arr_1);
$arr_3 = array();
for($i = 0; $i < $max; $i++){
$arr_3[$i] = intval($arr_1[$i]) + intval($arr_2[$i]);
}
我敢肯定还有很多其他方法可以做到这一点,但这是我想到的第一个方法。你也可以做一个foreach
循环:
$arr_3 = array();
foreach($arr_1 as $k => $v){
$arr_3[$k] = intval($v) + intval($arr_2[$k]);
}
我只是在这里进行临时操作,foreach 避免笛卡尔效应有点棘手。不过值得一试。
如果您需要添加通过键而不是位置匹配的元素,您可以尝试以下操作:
$array1 = array(1=>5, 2=>3, 3=>2);
$array2 = array(3=>3, 2=>4, 1=>0); //unsorted array
$keys_matched = array_intersect_key ( $array1 , $array2);
foreach ($keys_matched as $key => $value) {
$result[$key] = $array1[$key] + $array2[$key];
}
print_r($result); //Displays: Array ( [1] => 5 [2] => 7 [3] => 5
您将查看两个数组并将每个数组的每个值相加,然后将该结果添加到另一个数组。
foreach($array1 as $val1) {
foreach($array2 as $val2) {
array_push($newArray, intval($val1)+ intval(val2));
}
}