2012-02-10 62 views
0

我想知道如何執行此操作。如何使用PHP中的迭代函數來運行數學運算

說我有值 的陣列[0] 123 [1] 23242 [2] 123123 [3] 134234 [4] 0 [5] 12312 [6] 1232 [7] 0 [8] 2342 [9] 0

如何i循環通過該陣列,每次它擊中一個零,推入一個新的數組,在前述值的總和到最後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 

謝謝你,如果你能幫助我!

回答

6
$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 
    } 
} 

而對於你的第二個( 「終極」:P)的例子,我們只是bin中的新陣列,而是保存回我們循環的陣列中:

$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 
    } 
} 

根本沒有測試過,但我認爲它的邏輯應該在那裏。

+0

謝謝你,這樣的作品,但我意識到我需要做的其實是不同的.....我需要遍歷與陣列值和0,然後從另一個數組中添加總和。所以我實際上使用2個數組。一個告訴我何時計數和重置,另一個提供實際值來添加....如果你明白我的意思 – KyleK 2012-02-10 20:57:54

+0

用每個數組的例子更新你的第一篇文章,以及他們需要如何組合,然後在這裏回覆評論,我會看看:) – Joe 2012-02-10 21:46:49

+0

感謝喬,甚至花時間幫我。我真的很感激它...... – KyleK 2012-02-11 00:25:03

2

這是一個基本的算法任務...

$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);