2011-11-30 150 views
0

我有兩個數組,都是關聯的;雙foreach意外的結果

ArrayUneaten (lemon=> 7, banana=>6, apple=>10)//the units of UNeaten fruit 
ArrayOrdered (lemon =>10, strawberry =>10, Kiwi=>0, Apple=>20, Banana=>6) // the units of ordered fruit 

我想創建一個第三排所有的水果選擇,吃水果的% (相對於水果有序)(如果在相同的順序ArrayOrdered數字是罰款)。

(如果訂購值= 0,%食用= 0%NB出於其它原因)

(NB2,請注意所希望的草莓那%爲100,沒有草莓吃剩的,10有序的,因此10都被吃掉)

所以所需的陣列

ArrayEatenPercentage (70, 100, 0, 50, 0) 

我的編碼嘗試

$CompletedPercentagesArray = array(); 

foreach($ArrayOrdered as $fruitOrdered => $unitsOrdered) { 
    if ($unitsOrdered == 0){ 
     //if it's zero it's never been selected 
     $completedPercentage = 0; 
    } 
    foreach($ArrayUneaten as $fruitUneaten => $unitsUneaten) { 
     if ($fruitUneaten == $fruitOrdered){ 
      // ($totalCardsChosen = $timesSelected*25; - please ignore) 
      $percentageUneaten = 100*($fruitUneaten/$unitsOrdered); 
      $percentageEaten = 100 - $percentageUneaten; 
      $completedPercentage = round ($percentageEaten, 1); 
     } 
     else {//if this is true then it's been selected and been finished 
      $completedPercentage = 100; 
     } 
    } 
    array_push($completedPercentagesArray, $completedPercentage); //this adds the variable to the array 
} 
print_r($completedPercentagesArray); 

電流輸出是意外的。

只有ArrayUneaten的最後一個值被正確處理。

其他值返回100%。

ArrayEatenPercentage (100, 100, 100, 50, 100) 
+0

您應該*顯示*當前輸出以及預期輸出。 – Gabe

+0

在代碼中使用$ fruitsUneaten,在示例中使用ArrayUneaten。這可能是因爲你在代碼中的某個地方使用了錯誤的名字。 – Qqwy

+0

都糾正了謝謝 – Gamemorize

回答

1

假設所有的水果都在「有序」陣列,你可以嘗試這樣的事:

$results = array(); 
foreach($arrayOrdered as $fruit => $numOrdered) { 
    if(Isset($arrayUneaten[$fruit])) { 
     $numEaten = $numOrdered - $arrayUneaten[$fruit]; 
    } else { 
     $numEaten = $numOrdered; 
    } 
    if($numOrdered > 0) { 
     $percentEaten = $numEaten/$numOrdered * 100; 
    } else { 
     $percentEaten = 0; 
    } 
    $results[$fruit] = array('eaten' => $numEaten, 'percent' => $percentEaten); 
} 

你的結果陣列將水果進行方向性的,既有絕對量食用和百分比。

+0

謝謝接受 – Gamemorize

1

你應該增加休息;在if($ fruitUneaten == $ fruitOrdered){condition block。否則,除非當前水果是$ ArrayUneaten的最後一個元素(這是蘋果),$ completedPercentage總是變爲100,因爲內循環執行的最後一次迭代會轉到另一個塊。

+0

謝謝,雖然我與上述因爲它通過第一次和工作。不確定哪兩個代碼會更快或更穩定。 – Gamemorize