2014-10-14 2 views
1

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

Это мой массив:

Array 
(
    [names] => Array 
     (
      [0] => Name1 
      [1] => Name2 
      [2] => Name1 
     ) 

    [ids] => Array 
     (
      [0] => 1 
      [1] => 2 
      [2] => 1 
     ) 

    [quantities] => Array 
     (
      [0] => 255 
      [1] => 2 
      [2] => 467 
     ) 

) 

И я хочу суммировать «quantities», где names или ids - это то же самое.

Пример вывода должен быть:

Array 
(
    [names] => Array 
     (
      [0] => Name1 
      [1] => Name2 
     ) 

    [ids] => Array 
     (
      [0] => 1 
      [1] => 2 
     ) 

    [quantities] => Array 
     (
      [0] => 722 
      [1] => 2 
     ) 

) 

Я знаю, что есть функция, как «array_reduce», но не знаю, как использовать его.

Спасибо за помощь!

+1

результат будет? –

+0

соответствует ли каждый идентификатор уникальному имени? –

+0

Да! оно делает. :) – TomLi

ответ

1

попробовать это

$result = []; 
    foreach($array['ids'] as $key=>$val){ 

     if(array_key_exists($val, $result)){ 

      $result[$val]['sum_quantity'] += $array['quantities'][$key]; 
     } 
     else{ 
      $result[$val]['sum_quantity'] = $array['quantities'][$key]; 
      $result[$val]['name'] = $array['names'][$key]; 
      $result[$val]['id'] = $array['ids'][$key]; 
     } 
    } 

и выход будет, как в этом примере

Array 
    (
     [1] => Array //array key = id 
     (
      ['name'] => Name1, 
      ['sum_quantity'] => 722, 
      ['id'] => 1 
     ) 

     [2] => Array 
     (
      ['name'] => Name2, 
      ['sum_quantity'] => 2, 
      ['id'] => 2 
     ) 
) 
+0

Это именно то, что я искал !!! Спасибо, v - munch. – TomLi

0

Вы можете сделать это так:

$testArray['names'][0]='name1'; 
    $testArray['names'][1]='name2'; 
    $testArray['names'][2]='name1'; 

    $testArray['ids'][0]=1; 
    $testArray['ids'][1]=2; 
    $testArray['ids'][2]=1; 

    $testArray['quantities'][0]=255; 
    $testArray['quantities'][1]=2; 
    $testArray['quantities'][2]=467; 

    echo "<pre>"; 

    print_r($testArray); 

    $unqArray['names']=array(); 
    $unqArray['ids']=array(); 
    $unqArray['quantities']=array(); 

    foreach($testArray['ids'] as $key=>$value) 
    { 
     if(!in_array($value,$unqArray['ids'])) 
     { 
      $unqArray['names'][]=$testArray['names'][$key]; 
      $unqArray['ids'][]=$testArray['ids'][$key]; 
      $quantity=0; 
      foreach($testArray['ids'] as $keyId=>$valueId) 
      { 
       if($valueId==$value) 
       { 
        $quantity+=$testArray['quantities'][$keyId]; 
       } 
      } 
      $unqArray['quantities'][]=$quantity; 
     } 
    } 

    print_r($unqArray); 

    echo "</pre>"; 
Смежные вопросы