我有数组 $money ,其中键是钱的价值,但数组键是 - 有多少这种类型的钱。 这是示例:
$money = [
1 => 5,
2 => 2,
5 => 1,
10 => 4,
20 => 2,
50 => 3,
100 => 1,
200 => 1
];
其中 1 = 0.1EUR,2 = 0.2EUR,直到 200,其中 200 = 2EUR。关键值是 - 我有多少硬币。 在我获得交换 - itneger 95 之后,我需要根据数组键将其拆分,显示我收到的硬币数量和种类,并将这些硬币放回数组中。
我尝试过这种方式,但是如果 <= 找零
,程序只会给我每种硬币类型的 1 块 if ($change > 0) {
echo 'Your change is : '. $change;
foreach (array_reverse($money, true) as $key => $amount) {
if ($key <= $change) {
echo 'Returned coin: ' . $key . PHP_EOL;
}
这里是输出,你可以看到预期的输出是 95,但程序给了我 88
In progress
***
Your change is : 95
Returned coin: 50
Returned coin: 20
Returned coin: 10
Returned coin: 5
Returned coin: 2
Returned coin: 1
预期输出为:
In progress
***
Your change is : 95
Returned coin: 1 x 50
Returned coin: 2 x 20
Returned coin: 1 x 5
类似的东西,然后将它们添加到我的货币数组中。
答案 0 :(得分:0)
你很接近。您必须记住,可以返回特定硬币 $amount
次。所以我添加了另一个循环来做到这一点。不过,您必须跟踪当前的剩余价值。
$change = 95;
$rest = $change;
foreach (array_reverse($money, true) as $key => $amount) {
for ($i = 0; $i < $amount; $i++) {
if ($key <= $rest) {
echo 'Returned coin: ' . $key . PHP_EOL;
$rest -= $key;
}
}
}
工作example。
提前计算$key
(当前硬币价值)适合多少$rest
(剩余价值)。
foreach (array_reverse($money, true) as $key => $amount) {
if ($key <= $rest) {
$times = floor($rest / $key);
echo sprintf('Returned coin: %u x %u', $times, $key) . PHP_EOL;
$rest -= $key * $times;
}
}
Your change is : 95
Returned coin: 1 x 50
Returned coin: 2 x 20
Returned coin: 1 x 5
工作example。