问题描述
我想在 foreach 循环中返回匹配项的值。我已经尝试过打击代码,但它没有正确返回。如果与最后一项匹配,则不会返回正确的值。
//$bonuses = count => amount
Array
(
[15] => 25
[30] => 50
[46] => 100
)
// getting keys to compare the count
$counts = array_keys($bonuses);
foreach ($bonuses as $count => $bonus) {
if ($total_number_of_products <= next($counts)) {
$tti = 'Items: '. $total_number_of_products. ' Bonus: '. $bonus. '<BR/>';
}
}
如果小于或等于,循环应该返回项目。如果计数为 46
或更高(在本例中),则输出应为 100
。现在它返回 50
。
解决方法
您在正确的轨道上,但是您只需要在到达下一个键之前输出先前的奖励值。这是一种方法:
function get_bonus($total_number_of_products) {
$bonuses = array(15 => 25,30 => 50,46 => 100);
$bonus = 0;
foreach ($bonuses as $num_products => $next_bonus) {
if ($total_number_of_products < $num_products) break;
$bonus = $next_bonus;
}
return $bonus;
}
示例用法:
foreach ([10,20,30,45,46,50] as $products) {
echo 'Items: '. $products. ' Bonus: '. get_bonus($products). '<BR/>' . "\n";
}
输出:
Items: 10 Bonus: 0<BR/>
Items: 20 Bonus: 25<BR/>
Items: 30 Bonus: 50<BR/>
Items: 45 Bonus: 50<BR/>
Items: 46 Bonus: 100<BR/>
Items: 50 Bonus: 100<BR/>
请注意,您可以通过将 0 => 0
条目添加到 $bonuses
来进行轻微简化,然后您可以删除 $bonus = 0
行,即
function get_bonus($total_number_of_products) {
$bonuses = array(0 => 0,15 => 25,46 => 100);
foreach ($bonuses as $num_products => $next_bonus) {
if ($total_number_of_products < $num_products) break;
$bonus = $next_bonus;
}
return $bonus;
}