Double Foreach意外结果

时间:2011-11-30 09:10:37

标签: php arrays 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的顺序相同,则数字很好) 所有水果选择和吃水果的百分比(与水果订购相比)。

(NB因其他原因,如果有序值= 0,%吃掉= 0%)

(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)

2 个答案:

答案 0 :(得分: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 );
}

您的结果数组将在水果上键入,并且包含绝对量和百分比。

答案 1 :(得分:1)

你应该增加休息时间;在if($ fruitUneaten == $ fruitOrdered){condition block。否则,除非当前水果是$ ArrayUneaten的最后一个元素(也就是苹果),$ completedPercentage总是变为100,因为在内部循环的最后一次迭代中,exect将转到那个else块。