PHP foreach 循环返回匹配项

问题描述

我想在 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/>

Demo on 3v4l.org

请注意,您可以通过将 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;
}