我有两个数组,都是关联的;
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)
答案 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块。