Как выполнить математику с помощью функции итерации в PHP - PullRequest
0 голосов
/ 10 февраля 2012

Я хотел бы знать, как я могу выполнить это.

скажем, у меня есть массив значений [0] 123 [1] 23242 [2] 123123 [3] 134234 [4] 0 [5] 12312 [6] 1232 [7] 0 [8] 2342 [9] 0

Как я могу пройти через этот массив и каждый раз, когда он достигает нуля, вставлять в новый массив сумму предыдущих значений до последнего 0

например .... мой новый массив будет содержать.
[0] сумма ключей первого массива [0-4] [1] сумма [5-7] [2] сумма [8-9]

Я новичок в PHP и не могу понять, как мне это сделать. Например, как я могу посмотреть на предыдущие значения, просматривая массив

спасибо, если кто-нибудь может помочь Я ценю это

UPDATE: Итак, Джо хотел, чтобы я обновил это, чтобы он мог помочь мне дальше, так что вот оно ...

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

       Loop array        New Array, with comma delimitted values or maybe a MDA
       [0]5              [0]9,9  (sum of values in loop array between the zeros)
       [1]4              [1]7,16
       [2]0              [2]4,20 
       [3]3              [3]5,25
       [4]2 
       [5]2
       [6]0
       [7]4
       [8]0
       [9]3
       [10]2
       [11]0

И, наконец, самое важное, Как мне слить его обратно, чтобы он выглядел следующим образом

       [0]5             
       [1]4             
       [2]0,9,9            
       [3]3              
       [4]2 
       [5]2
       [6]0,7,16
       [7]4
       [8]0,4,20
       [9]3
       [10]2
       [11]0,5,25

Спасибо, если можете мне помочь!

Ответы [ 2 ]

6 голосов
/ 10 февраля 2012
$total = 0; // running total
$totals = array(); // saved totals

foreach ($values AS $value) // loop over the values
{
    $total += $value; // add to the running total
    if ($value == 0) // if it's a zero
    {
        $totals[] = $total; // save the total...
        $total = 0; // ...and reset it
    }
}

Для создания первого массива в вашем обновлении, что-то вроде этого:

$total = 0; // running total - this will get zeroed
$grand_total = 0; // running total - this won't be zeroed
$totals = array(); // saved totals

foreach ($values AS $value) // loop over the values
{
    $total += $value; // add to the running total
    $grand_total += $value; // add it to the grand total
    if ($value == 0) // if it's a zero
    {
        $totals[] = $total . ',' . $grand_total; // save the total and the grand_total
        $total = 0; // ...and reset the zeroable total
    }
}

А для вашего второго ("ultimate": P) примера мы просто помещаем в новый массив массив и вместо этого сохраняем обратно в массив, который мы зацикливаем:

$total = 0; // running total - this will get zeroed
$grand_total = 0; // running total - this won't be zeroed

foreach ($values AS $key => $value) // loop over the values - $key here is the index of the current array element
{
    $total += $value; // add to the running total
    $grand_total += $value; // add it to the grand total
    if ($value == 0) // if it's a zero
    {
        $values[$key] = '0,' . $total . ',' . $grand_total; // build the new value for this element
        $total = 0; // ...and reset the zeroable total
    }
}

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

2 голосов
/ 10 февраля 2012

Это базовая алгоритмическая задача ...

$array = array( 1,3,7,9,10,0,5,7,23,3,0,6);
$result = array();

$sum = 0;
for( $i=0,$c=count($array);$i<$c;$i++ ){
    if( $array[$i]==0 ){
        $result[] = $sum;
        $sum = 0;
    }else{
        $sum += $array[$i];
    }
}

print_r($array);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...