Как добавить значения массива в php по значению? - PullRequest
1 голос
/ 29 октября 2011

У меня есть такой результат:

Array ( [0] => 0, [1] => 2 ) 
Array ( [0] => 3, [1] => 3 ) 
Array ( [0] => 0, [1] => 1 ) 
Array ( [0] => 3, [1] => 1 ) 
Array ( [0] => 3, [1] => 3 ) 

и отсюда:

 $total = array(); $i=0; $count = 0;
  foreach($dates as $d){
       $total[$i] = count($value[$d]);
       $i++;
  }
print_r ($total); echo '<br>';

Что я хочу сделать, это добавить $total[0] как 0+3+0+3+3 = 9 и добавить $total[1] как 2+3+1+1+3 = 10.

Я хочу вернуть только 9 и 10

Есть идеи?

Спасибо

Ответы [ 3 ]

0 голосов
/ 29 октября 2011

Вы можете использовать array_reduce вместо цикла.

Предполагая, что вы начинаете с этого массива:

$dates = array(
    array(0, 2),
    array(3, 3),
    array(0, 1),
    array(3, 1),
    array(3, 3)
);

Мы определяем функцию сокращения:

function add_date($sum_array, $date) {
    $sum_array[0] += $date[0];
    $sum_array[1] += $date[1];
    return $sum_array;
}

$date_sums = array_reduce($dates, add_date, array(0, 0));

print_r($date_sums);

Отпечатки:

Array
(
    [0] => 9
    [1] => 10
)
0 голосов
/ 29 октября 2011

Предполагая,

$array = array(
    array(0, 2),
    array(3, 3),
    array(0, 1),
    array(3, 1),
    array(3, 3)
);

, это должно работать для любого числа массивов:

$results = array();
foreach ($array[0] as $i => $foo) {
    $results[] = array_sum(array_map(function ($arr) use ($i) {
                     return $arr[$i];
                 }, $array));
}

Обратите внимание, что для этого требуется хотя бы одна запись в $array, требуется, чтобы все вложенные массивы былиравной длины и требует PHP 5.3 +.

0 голосов
/ 29 октября 2011

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

$total_1 = 0;
$total_2 = 0;
foreach ($array as $a) {
  $total_1 += $a[0];
  $total_2 += $a[1];
}

echo "Total1: $total_1, Total2: $total_2";

Если у вас есть неизвестное количество элементов, используйте массив для суммирования их по ключам.Вам также нужен внутренний итератор.Это, кстати, довольно распространенный вопрос собеседования при приеме на работу в моем опыте.

// Array to hold all the sums
$sums = array();
foreach ($array as $a) {
  // internal iteration
  foreach ($a as $key=>$val) {
    // Add to the key if it already exists, otherwise initialize it to the current value.
    $sums[$key] = isset($sums[$key]) ? $sums[$key] += $val : $val;
  }
}

// Output your results:

foreach ($sums as $key=>$s) {
  echo "Sum of $key is $s\n";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...