2009-09-10 6 views
4

Если у меня есть мульти двумерный массив в PHP как так ...PHP array_sum на многомерном массиве

[0] => Array 
    (
     [url] => http://domain1.com 
     [domain] => domain1.com 
     [values] => Array 
      (
       [character_length] => 25 
       [word_count] => 7 
      ) 

    ) 

    [1] => Array 
    (
     [url] => http://domain2.com 
     [domain] => domain2.com 
     [values] => Array 
      (
       [character_length] => 30 
       [word_count] => 7 

    ) 

Как я могу объединить их для производства ....

[0] => Array 
    (
     [url] => *can be anything* 
     [domain] => *can be anything* 
     [values] => Array 
      (
       [character_length] => 55 
       [word_count] => 14 
      ) 

    ) 

ответ

5

Вобще простой foreach по всем пунктам и просуммировать значения:

$values = array(
    'character_length' => 0, 
    'word_count'  => 0 
); 
foreach ($array as $item) { 
    $values['character_length'] += $item['values']['character_length']; 
    $values['word_count']  += $item['values']['word_count']; 
} 
7

Я не думаю, что есть встроенная функция, которая позволила бы вы суммируете значения многомерного массива. Однако, это способ сделать это, используя функцию лямбда-стиля.

Давайте предположим, что это ваш массив:

[items] => Array 
     (
      [0] => Array 
       (
        [ID] => 11 
        [barcode] => 234334 
        [manufacturer] => Dell 
        [model] => D630 
        [serial] => 324233 
        [current_value] => 1100.00 
       ) 

      [1] => Array 
       (
        [ID] => 22 
        [barcode] => 323552 
        [manufacturer] => Dell 
        [model] => D630 
        [serial] => 234322 
        [current_value] => 1500.00 
       ) 

     ) 

Вы можете создать функцию, которую можно было передать значения:

$array_value_sum = create_function('$array,$key', '$total = 0; foreach($array as $row) $total = $total + $row[$key]; return $total;'); 

, а затем использовать его так:

echo "Total Current Value" . $array_value_sum($obj['items'], 'current_value'); 
+0

Это именно то, что я искал – AdRock

+0

Отличное решение для моего вопроса FROM (SELECT ...) с доктриной 2 –

0

Вы можете сделать это, используя array_sum() и array_map() funtion, как показано ниже:

$totalCharacterLength = array_sum(array_map(function($item) { 
    return $item['values']['character_length']; 
}, $totalCharacterLength)); 

$totalWordCount = array_sum(array_map(function($item) { 
    return $item['values']['word_count']; 
}, $totalWordCount)); 
Смежные вопросы