Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Сложение двух массивов
Форумы портала PHP.SU » » Хранение данных, их вывод и обработка » Сложение двух массивов

Страниц (1): [1]
 

1. duk - 26 Апреля, 2011 - 17:42:01 - перейти к сообщению
Есть массив
PHP:
скопировать код в буфер обмена
  1.  
  2.  $array1 = array ("1" => 1,"2" => 2,"4" => 4);
  3.  


и другой массив
PHP:
скопировать код в буфер обмена
  1.  
  2.  $array2 = array ("1" => 4, "2" => 4, "5" => 5);
  3.  


можно ли их как то быстро и красиво сложить, чтобы получилось
PHP:
скопировать код в буфер обмена
  1.  
  2.  $array2 = array ("1" => 5, "2" => 6, "4" => 4, "5" => 5);
  3.  


?
2. Саныч - 26 Апреля, 2011 - 17:49:43 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $array1 = array ("1" => 1,"2" => 2,"4" => 4);
  2. $array2 = array ("1" => 4, "2" => 4, "5" => 5);
  3. foreach($array1 as $k => $v)
  4.    array_key_exists($k,$array2) ? $array2[$k] += $v : $array2[$k] = $v;
3. OrmaJever - 26 Апреля, 2011 - 17:50:18 - перейти к сообщению
Нет быстренько нельзя Улыбка Но можно написать свою функцию
PHP:
скопировать код в буфер обмена
  1. function a($arr1, $arr2)
  2. {
  3.   $count = (count($arr1) >= count($arr2)) ? count($arr1) : count($arr2);
  4.   $new_arr = array();
  5.  
  6.    for($i=0;$i<$count;$i++)
  7.         $new_arr[$i] = $arr1[$i] + $arr2[$i];
  8.  
  9.    return $new_arr;
  10. }

Но это конечно же при учёте что значения масивов числа.
4. Саныч - 26 Апреля, 2011 - 18:01:58 - перейти к сообщению
проверил свой вариант, все норм
OrmaJever, попробуйте запустить вашу ф-цию. Результат: Array ( [0] => 0 [1] => 5 [2] => 6 )
"Немного" не то, что ожидалось
5. Champion - 26 Апреля, 2011 - 18:24:08 - перейти к сообщению
array_merge ?
6. Саныч - 26 Апреля, 2011 - 18:29:23 - перейти к сообщению
Champion, array_merge просто сливает массивы в кучу, а в данном примере нужно сложить значения в одинаковых ключах
7. Champion - 26 Апреля, 2011 - 18:42:10 - перейти к сообщению
А. Вопрос по диагонали прочитал, сори
8. movEAX - 26 Апреля, 2011 - 19:35:39 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. function array_add(array $arrA, array $arrB) {
  2.     foreach($arrA as $k=>$v) {
  3.         if(isset($arrB[$k])) {
  4.             $arrB[$k]+=$v;
  5.         }
  6.     }
  7.     return $arrB + $arrA;
  8. }
  9.  
9. SAD - 26 Апреля, 2011 - 19:40:44 - перейти к сообщению
я бы для начала сделал array_values(), потом проверил бы размеры массивов, а потом бы уже складывал.
10. EuGen - 26 Апреля, 2011 - 19:41:48 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2. $result=array_map(create_function('$a, $b', 'return $a+$b;'), $array1,$array2);
  3.  

Хм, хотя массивы ассоциативные. Надо бы будет проверить.
11. duk - 26 Апреля, 2011 - 20:38:49 - перейти к сообщению
Всем спасибо, Санычу отдельная благодарность

 

Powered by ExBB FM 1.0 RC1