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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Сумма значений многомерного массива по ключу

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: найти сумму значений многомерного массива по ключу
ff00
Отправлено: 08 Августа, 2012 - 09:12:52
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Авг. 2012  


Помог: 0 раз(а)




Есть многомерный массив

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. (
  3.     [0] => Array
  4.         (
  5.             [name] => Вася
  6.             [height] => 10
  7.             [weight] => 7155
  8.             [sm] => 3570
  9.             [count] => 15
  10.         )
  11.  
  12.     [1] => Array
  13.         (
  14.             [name] => Петя
  15.             [height] => 10
  16.             [weight] => 2925
  17.             [sm] => 1545
  18.             [count] => 15
  19.         )
  20.  
  21.     [2] => Array
  22.         (
  23.             [name] => Вася             
  24.             [height] => 10
  25.             [weight] => 9840
  26.             [sm] => 5250
  27.             [count] => 30
  28.         )
  29.  
  30.     [3] => Array
  31.         (
  32.             [name] => Вася             
  33.             [height] => 10
  34.             [weight] => 1005
  35.             [sm] => 510
  36.             [count] => 15
  37.         )
  38.  
  39.     [4] => Array
  40.         (
  41.             [name] => Петя             
  42.             [height] => 10
  43.             [weight] => 11010
  44.             [sm] => 5310
  45.             [count] => 15
  46.         )
  47.  
  48.     [5] => Array
  49.         (
  50.             [name] => Вова             
  51.             [height] => 10
  52.             [weight] => 57030
  53.             [sm] => 31140
  54.             [count] => 30
  55.         )
  56. )
  57.  


Нужно что бы получился массив на с суммой на основе ключа "name", типа такого:

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. (
  3.     [0] => Array
  4.         (
  5.             [name] => Вася
  6.             [height] => 10 + 10 + 10
  7.             [weight] => 7155 + 9840 + 1005
  8.             [sm] => 3570 + 5250 + 510
  9.             [count] => 15 + 30 + 15
  10.         )
  11.  
  12.     [1] => Array
  13.         (
  14.             [name] => Петя
  15.             [height] => 10 + 10
  16.             [weight] => 2925 + 11010
  17.             [sm] => 1545 + 5310
  18.             [count] => 15 + 15
  19.         )
  20.  
  21.     [2] => Array
  22.         (
  23.             [name] => Вова             
  24.             [height] => 10
  25.             [weight] => 57030
  26.             [sm] => 31140
  27.             [count] => 30
  28.         )
  29. )
  30.  


Сделал перебором в цикле в цикле, но если элементов больше 1000 то выполняется очень долго.
 
 Top
tuareg
Отправлено: 08 Августа, 2012 - 09:33:17
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




Код перебора выложите?!
 
 Top
EuGen Администратор
Отправлено: 08 Августа, 2012 - 09:38:18
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)






-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Мелкий Супермодератор
Отправлено: 08 Августа, 2012 - 09:47:25
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Я надеюсь, исходный массив не от базы данных получен? Иначе лучше её и попросить посчитать.


-----
PostgreSQL DBA
 
 Top
ff00
Отправлено: 08 Августа, 2012 - 09:49:25
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Авг. 2012  


Помог: 0 раз(а)




Уже сообразили. Работает шустро.
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.         $arr = 'массив';
  3.        
  4.         $tmp = array();
  5.         for($i=0;$i<count($arr);$i++){ 
  6.                 $name = $arr[$i]['name'];
  7.                 if(array_key_exists($name, $tmp) == true){
  8.                         $tmp[$name]['height'] += $arr[$i]['height'];
  9.                         $tmp[$name]['weight'] += $arr[$i]['weight'];
  10.                         $tmp[$name]['sm']         += $arr[$i]['sm'];
  11.                         $tmp[$name]['count']  += $arr[$i]['count'];
  12.                 }
  13.                 else $tmp[$name] = $arr[$i];
  14.         }
  15.         $res = array_values($tmp);
  16.        
  17.         $res = 'получено';
  18.  
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB