2015-03-05 5 views
0

Мне нужно объединить массив массивов с одинаковым идентификатором, размером и типом и суммировать значение ключа num в php. Я нашел решения только для одного ключа, но мне нужно соответствовать в 3-х ключейКак суммировать значение ассоциативного массива на 3 равных значениях ключа

Array 
(
    [3] => Array 
     (
      [id] => 460 
      [size] => 24 
      [num] => 1 
      [price] => 6800.00 
      [type] => 1 
     ) 

    [2] => Array 
     (
      [id] => 460 
      [size] => 24 
      [num] => 1 
      [price] => 6800.00 
      [type] => 1 
     ) 

    [1] => Array 
     (
      [id] => 460 
      [size] => 24 
      [num] => 1 
      [price] => 6800.00 
      [type] => 2 
     ) 

) 

мне нужно получить массив, как это ниже, где Everyting остается неизменным, и только Num поле суммируется, где идентификатор, тип и размер значения ключа одинаковы

массив (

[2] => Array 
     (
      [id] => 460 
      [size] => 24 
      [num] => 2 
      [price] => 6800.00 
      [type] => 1 
     ) 

    [1] => Array 
     (
      [id] => 460 
      [size] => 24 
      [num] => 1 
      [price] => 6800.00 
      [type] => 2 
     ) 

) 
+0

Возможный дубликат [Сумма столбцов в многомерном массиве без циклов] (http://stackoverflow.com/questions/28875117/sum-of-columns-in-multidimensional-array-without-loops) - просто измените обратный вызов функцию для проверки трех свойств, соответствующих –

+0

Так в чем же проблема? Если вы знаете, как это сделать для одного, вы запустите его для 3-х кортежей. –

+0

это http://stackoverflow.com/questions/28875117/sum-of-columns-in-multidimensional-array-without-loops не работает для меня, я не знаю, какие значения будут в массиве. Мне просто нужно суммировать значения num, если id, size и type имеют одинаковое значение. Мне не нужно просто суммировать значения, мне нужно суммировать их, если эти три ключа одинаковы. Я нашел это для http://stackoverflow.com/questions/1496682/how-to-sum-values-of-the-array-of-the-same-key, но это не решение моей проблемы. Я все время ищу решение. – emir

ответ

0

я решил очень просто, используя временный массив, как в этом примере

$newArr = array(); 
foreach($your_arr as $key=>$val){ 
    $index = $val['context'].$val[1]; 
    if(isset($newArr[$index])){ 
     $val_0 = $newArr[$val['context'].$val[1]][0] + $val[0]; 
     $newArr[$val['context'].$val[1]] = array($val_0, $val[1], 'context'=>$val['context']); 
    }else{ 
     $newArr[$val['context'].$val[1]] = $val; 
    } 
} 
$result = array_values($newArr); 
print '<pre>'; 
print_r($result); 
print '</pre>'; 
Смежные вопросы