我试图通过在时间上添加一个点来使这个功能工作,直到没有更多。
我要做的是,让它将"Torsk"
值增加1,然后转到下一个,递增1,然后依次打开,直到$prize
中设置的所有点都有已经分发。
$prize = [
"Torsk" => 0,
"Rødspætte" => 0,
"Mørksej" => 0,
"Skrubbe" => 0,
"Lubbe/Lyssej" => 0,
"Ising" => 0,
"Lange" => 0,
"Makrel" => 0,
"Hornfisk" => 0,
"Pig-/Slet-hvar" => 0,
"Havkat" => 0,
"Laks/Havørred" => 0,
];
$points = 21;
for ($i = 0; $i < $points; ++$i) {
foreach ($prize as $key => $value) {
$prize[$key]++;
if (array_sum($prize) == $points) continue;
}
}
echo array_sum($prize);
echo "<br />";
print_r($prize);
当它完成时我希望数组是这样的:
$prize = [
"Torsk" => 2,
"Rødspætte" => 2,
"Mørksej" => 2,
"Skrubbe" => 2,
"Lubbe/Lyssej" => 2,
"Ising" => 2,
"Lange" => 2,
"Makrel" => 2,
"Hornfisk" => 2,
"Pig-/Slet-hvar" => 1,
"Havkat" => 1,
"Laks/Havørred" => 1,
];
但事实并非相反,它只是为所有人增加了21。
答案 0 :(得分:3)
你可以使用break 2;在达到条件时从外循环中断,例如:
for ($i = 0; $i < count($prize); ++$i) {
foreach ($prize as $key => $value) {
$prize[$key]++;
if (array_sum($prize) == $points) {
break 2;
}
}
}
答案 1 :(得分:0)
试试这段代码:
$prize = [
"Torsk" => 0,
"Rødspætte" => 0,
"Mørksej" => 0,
"Skrubbe" => 0,
"Lubbe/Lyssej" => 0,
"Ising" => 0,
"Lange" => 0,
"Makrel" => 0,
"Hornfisk" => 0,
"Pig-/Slet-hvar" => 0,
"Havkat" => 0,
"Laks/Havørred" => 0,
];
$points = 21;
foreach ($prize as $key => $value) {
$prize[$key]++;
if (array_sum($prize) == $points) break;
}
if(array_sum($prize) < $points){
foreach ($prize as $key => $value) {
$prize[$key]++;
if (array_sum($prize) == $points) break;
}
}
echo array_sum($prize);
echo "<br />";
print_r($prize);
答案 2 :(得分:0)
您应该使用break 2;
代替continue
来破坏两个嵌套的封闭结构。
以下是执行相同任务的改进方法。
<?php
/**
* Disturbe values until the sum is equal to $points
* @param $prize array
* @param $points integer
* @return array|false
*/
function distribute_prize( $prize = array(), $points = 21 ){
$sum = array_sum( $prize );
if( $sum == $points ) return $points;
elseif( $sum > $points || $points < 0 ) return false;
while( true ){
foreach ($prize as $key => $value) {
$prize[$key]++;
if( array_sum( $prize ) == $points ) break 2;
}
}
return $prize;
}
// TEST
$prize = [
"Torsk" => 0,
"Rødspætte" => 0,
"Mørksej" => 0,
"Skrubbe" => 0,
"Lubbe/Lyssej" => 0,
"Ising" => 0,
"Lange" => 0,
"Makrel" => 0,
"Hornfisk" => 0,
"Pig-/Slet-hvar" => 0,
"Havkat" => 0,
"Laks/Havørred" => 0,
];
$points = 21;
print_r( distribute_prize( $prize, $points ) );