最初に必要なものをリストします。
- 10を超えることのできない4つのボックスがあります。
- 100を超えることのできない別の4つのボックスがあります。
- すべてのボックスを順番に入力する必要があります。
次に、それを実現するロジックを作成します。
- 最初の4つのボックスに10を入力し、メンバー変数からそれを差し引きます。$ memberが10未満の場合は、現在のボックスに書き込みます。
- otger 4ボックスに100を入力し、メンバー変数からそれを差し引きます。$ memberが10未満の場合は、現在のボックスに書き込みます。
ご覧のとおり、この2つの操作はほぼ同じです。次に、それを1つの操作にすることができます。
- 8つのボックスを入力し[最初の4つのボックス=10の場合、それ以外の場合は100]、$memberからマイナスします。$memberが[最初の4つのボックス=10の場合、それ以外の場合は100]より小さい場合は、現在のボックスに書き込みます。
ここにいくつかの解決策があります(もっとあるかもしれません):
Closureを使用した2アレイのPhp5.3+ソリューション:
<?php
$member = 300;
$small_boxes = array_map(function ($value) use(&$member) {
$return = $member > 10 ? 10 : $member;
$member = $member > 10 ? $member - 10 : 0;
return $return;
}, array_fill(0, 4, 0));
$big_boxes = array_map(function ($value) use(&$member) {
$return = $member > 100 ? 100 : $member;
$member = $member > 100 ? $member - 100 : 0;
return $return;
}, array_fill(0, 4, 0));
var_dump($small_boxes, $big_boxes);
?>
Closureを使用した1つのアレイを使用したPhp5.3+ソリューション:
<?php
$member = 300;
$count = 1;
$boxes = array_map(function ($value) use(&$member, &$count) {
if ($count <= 4)
{
$return = $member > 10 ? 10 : $member;
$member = $member > 10 ? $member - 10 : 0;
}
else
{
$return = $member > 100 ? 100 : $member;
$member = $member > 100 ? $member - 100 : 0;
}
$count++;
return $return;
}, array_fill(0, 8, 0));
var_dump($boxes);
?>
PHP 5.3-foreachを使用した2つのアレイを使用したソリューション:
<?php
$member = 300;
$small_boxes = $big_boxes = array_fill(0, 4, 0);
foreach ($small_boxes as $key => $value)
{
if ($member > 10)
{
$small_boxes[$key] = 10;
$member -= 10;
}
else
{
$small_boxes[$key] = $member;
$member = 0;
break;
}
}
foreach ($big_boxes as $key => $value)
{
if ($member > 100)
{
$big_boxes[$key] = 100;
$member -= 10;
}
else
{
$big_boxes[$key] = $member;
$member = 0;
break;
}
}
var_dump($small_boxes, $big_boxes);
?>
PHP 5.3-foreachを使用した1つのアレイを使用したソリューション:
<?php
$member = 300;
$box = array_fill(0, 8, 0);
foreach ($box as $key => $value)
{
if ($key < 4)
{
$box[$key] = $member > 10 ? 10 : $member;
$member = $member > 10 ? $member - 10 : 0;
}
else
{
$box[$key] = $member > 100 ? 100 : $member;
$member = $member > 100 ? $member - 100 : 0;
}
}
var_dump($box);
?>
好きなものを使ってください:)
foreachを使用して印刷する必要があります。