2012-06-22 2 views
-1

Ну, я должен сказать, что я потерял ощущение, что операция должна быть достаточно быстрой, так что вы ищете быстродействующий комбайн.PHP: объединить/объединить значения в массивах на основе ввода ключа

мой массив Похоже

Array 
(
    [0] => Array 
     (
      [id] => 35 
      [item] => Ball Pen 
      [qty] => 1 
      [price] => 23 
      [total] => 23 
     ) 

    [1] => Array 
     (
      [id] => 34 
      [item] => Summer vest 
      [qty] => 1 
      [price] => 23 
      [total] => 23 
     ) 

    [2] => Array 
     (
      [id] => 34 
      [item] => Summer vest 
      [qty] => 3 
      [price] => 23 
      [total] => 69 
     ) 
) 

И как выход я хочу сумму Qty, если идентификатор имеет место более чем один раз

Array 
(
    [35] => Array 
     (
      [id] => 35 
      [item] => Ball Pen 
      [qty] => 1 
      [price] => 23 
      [total] => 23 
     ) 

    [34] => Array 
     (
      [id] => 34 
      [item] => Summer vest 
      [qty] => 4 
      [price] => 46 
      [total] => 92 
     ) 

) 

ответ

3

Что-то, как это должно работать

$sum = array(); 
$input = array(); // Your array 
array_walk($input, function($el) use(&$sum) { 
    if(!isset($sum[ $el['id'] ])) 
     $sum[ $el['id'] ] = 0; 
    $sum[ $el['id'] ] += $el['qty']; 
}); 

Here is a demo, показывающий правильный выход.

array(2) { [35]=> int(1) [34]=> int(4) } 

Вы можете получить обновленный выход с чем-то вроде этого:

$output = array(); 
$input = array(); // Your array 
array_walk($input, function($el) use(&$output) { 
    if(!isset($output[ $el['id'] ])) 
     $output[ $el['id'] ] = array( 
      'id' => $el['id'], 
      'item' => $el['item'], 
      'qty' => 0, 
      'price' => 0, 
      'total' => 0 
     ); 

    $output[ $el['id'] ]['qty'] += $el['qty']; 
    $output[ $el['id'] ]['price'] += $el['price']; 
    $output[ $el['id'] ]['total'] += $el['total']; 
}); 
var_dump($output); 
Смежные вопросы