Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Получить из двумерного массива новый суммарный массив
 
 автор: skinny   (08.02.2011 в 11:08)   письмо автору
 
 

есть массив с повторяющимися значениями, нужно преобразовать его в массив где значения повторяющихся элементов сложились бы


Array
(
    [0] => Array
        (
            [tovar_id] => 10
            [kolvo] => 0.11
            [cena] => 9760
        )

    [1] => Array
        (
            [tovar_id] => 10
            [kolvo] => 0.12
            [cena] => 9760
        )

    [2] => Array
        (
            [tovar_id] => 10
            [kolvo] => 0.15
            [cena] => 9760
        )

    [3] => Array
        (
            [tovar_id] => 10
            [kolvo] => 0.156
            [cena] => 9760
        )

    [4] => Array
        (
            [tovar_id] => 10
            [kolvo] => 0.21
            [cena] => 9760
        )

    [5] => Array
        (
            [tovar_id] => 10
            [kolvo] => 0.24
            [cena] => 9760
        )

    [6] => Array
        (
            [tovar_id] => 10
            [kolvo] => 0.4
            [cena] => 9760
        )

    [7] => Array
        (
            [tovar_id] => 10
            [kolvo] => 0.5
            [cena] => 9760
        )

    [8] => Array
        (
            [tovar_id] => 10
            [kolvo] => 0.529
            [cena] => 9760
        )

    [9] => Array
        (
            [tovar_id] => 10
            [kolvo] => 0.54
            [cena] => 9760
        )

    [10] => Array
        (
            [tovar_id] => 10
            [kolvo] => 0.69
            [cena] => 9760
        )

    [11] => Array
        (
            [tovar_id] => 10
            [kolvo] => 0.69
            [cena] => 9760
        )

    [12] => Array
        (
            [tovar_id] => 10
            [kolvo] => 1.2
            [cena] => 9760
        )

    [13] => Array
        (
            [tovar_id] => 10
            [kolvo] => 1.3
            [cena] => 9331.3
        )

    [14] => Array
        (
            [tovar_id] => 310
            [kolvo] => 25.64
            [cena] => 15057
        )

    [15] => Array
        (
            [tovar_id] => 310
            [kolvo] => 41.4
            [cena] => 4415
        )

    [16] => Array
        (
            [tovar_id] => 313
            [kolvo] => 0.583
            [cena] => 9242
        )

    [17] => Array
        (
            [tovar_id] => 314
            [kolvo] => 2.85
            [cena] => 16000
        )

    [18] => Array
        (
            [tovar_id] => 314
            [kolvo] => 8.11
            [cena] => 18160
        )

)



нужно получить такой же массив, но только те позиции где tovar_id одинаковый - нужно сложить их количество
сколько не бился не выходит
а может быть ещё и такая ситуация когда в массиве будут только элементы у которых все tovar_id одинаковые.

  Ответить  
 
 автор: cheops   (08.02.2011 в 11:25)   письмо автору
 
   для: skinny   (08.02.2011 в 11:08)
 

А вы используйте в новом массиве в качестве ключа значение tovar_id
<?php
  $arr 
= array ( 
    
=> array 
        ( 
            
'tovar_id' => 10,
            
'kolvo' => 0.11
            
'cena' => 9760 
        
), 

    
=> Array 
        ( 
            
'tovar_id' => 10
            
'kolvo' => 0.12
            
'cena' => 9760 
        
), 

    
=> Array 
        ( 
            
'tovar_id' => 10
            
'kolvo' => 0.15
            
'cena' => 9760 
        
), 

    
=> Array 
        ( 
            
'tovar_id' => 10
            
'kolvo' => 0.156
            
'cena' => 9760 
        
), 

    
=> Array 
        ( 
            
'tovar_id' => 10
            
'kolvo' => 0.21
            
'cena' => 9760 
        
), 

    
=> Array 
        ( 
            
'tovar_id' => 10
            
'kolvo' => 0.24
            
'cena' => 9760 
        
), 

    
=> Array 
        ( 
            
'tovar_id' => 10
            
'kolvo' => 0.4
            
'cena' => 9760 
        
), 

    
=> Array 
        ( 
            
'tovar_id' => 10
            
'kolvo' => 0.5
            
'cena' => 9760 
        
), 

    
=> Array 
        ( 
            
'tovar_id' => 10
            
'kolvo' => 0.529
            
'cena' => 9760 
        
), 

    
=> Array 
        ( 
            
'tovar_id' => 10
            
'kolvo' => 0.54
            
'cena' => 9760 
        
), 

    
10 => Array 
        ( 
            
'tovar_id' => 10
            
'kolvo' => 0.69
            
'cena' => 9760 
        
), 

    
11 => Array 
        ( 
            
'tovar_id' => 10
            
'kolvo' => 0.69
            
'cena' => 9760 
        
), 

    
12 => Array 
        ( 
            
'tovar_id' => 10
            
'kolvo' => 1.2
            
'cena' => 9760 
        
), 

    
13 => Array 
        ( 
            
'tovar_id' => 10
            
'kolvo' => 1.3
            
'cena' => 9331.3 
        
), 

    
14 => Array 
        ( 
            
'tovar_id' => 310
            
'kolvo' => 25.64
            
'cena' => 15057 
        
), 

    
15 => Array 
        ( 
            
'tovar_id' => 310
            
'kolvo' => 41.4
            
'cena' => 4415 
        
), 

    
16 => Array 
        ( 
            
'tovar_id' => 313
            
'kolvo' => 0.583
            
'cena' => 9242 
        
), 

    
17 => Array 
        ( 
            
'tovar_id' => 314
            
'kolvo' => 2.85
            
'cena' => 16000 
        
), 

    
18 => Array 
        ( 
            
'tovar_id' => 314
            
'kolvo' => 8.11
            
'cena' => 18160 
        


  );
  
$result = array();
  for(
$i 0$i count($arr); $i++)
  {
    
$result[$arr[$i]['tovar_id']]['tovar_id'] = $arr[$i]['tovar_id'];
    
$result[$arr[$i]['tovar_id']]['kolvo'] += $arr[$i]['kolvo'];
    
$result[$arr[$i]['tovar_id']]['cena'] += $arr[$i]['cena'];
  }
  echo 
"<pre>";
  
print_r($result);
  echo 
"<pre>";
?>

Результат
Array
(
    [10] => Array
        (
            [tovar_id] => 10
            [kolvo] => 6.835
            [cena] => 136211.3
        )

    [310] => Array
        (
            [tovar_id] => 310
            [kolvo] => 67.04
            [cena] => 19472
        )

    [313] => Array
        (
            [tovar_id] => 313
            [kolvo] => 0.583
            [cena] => 9242
        )

    [314] => Array
        (
            [tovar_id] => 314
            [kolvo] => 10.96
            [cena] => 34160
        )

)

  Ответить  
 
 автор: skinny   (08.02.2011 в 12:03)   письмо автору
 
   для: cheops   (08.02.2011 в 11:25)
 

да то что нужно
пришлось немного переделать его под другой функционал
но в общем и целом именно эта реализация помогла и стала основой.
я вчера ночью уже писал этот код, поэтому запарился и там цены складывать не нужно
там нужно вывести сумму всех матерьялов данного tovar_id, при том что цена может быть разная, поэтому просто перемножить цену на количество в результатирующем массиве не годиться, поэтому сумма вычислялась так же в процессе обработки первого массива

$massiv[$arr[$i]['tovar_id']]['tovar_id'] = $arr[$i]['tovar_id'];
$massiv[$arr[$i]['tovar_id']]['kolvo'] += $arr[$i]['kolvo'];
$massiv[$arr[$i]['tovar_id']]['summa'] += $arr[$i]['kolvo']*$arr[$i]['cena'];

  Ответить  
 
 автор: sim5   (08.02.2011 в 12:22)   письмо автору
 
   для: skinny   (08.02.2011 в 11:08)
 

А откуда массив этот, результат чего?

  Ответить  
 
 автор: skinny   (05.03.2011 в 01:17)   письмо автору
 
   для: sim5   (08.02.2011 в 12:22)
 

результат выборки товаров для отчёта
отчёт по количеству и сумме за выбранный период.

  Ответить  
 
 автор: sim5   (05.03.2011 в 04:16)   письмо автору
 
   для: skinny   (05.03.2011 в 01:17)
 

Значит лучше переложить эту задачу на запрос.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования