php - 如何根据数组键拆分整数,然后根据我如何拆分该整数添加值
问题描述
我有数组 $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 我需要根据数组键将其拆分,显示我得到了多少和什么样的硬币并将这些硬币放回数组中。
我尝试过这种方式,但如果是 <= change,programm 只返回每种硬币类型的 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
类似的东西,然后将它们添加到我的货币数组中。
解决方案
你很接近。您必须记住,有可能返回特定的硬币$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;
}
}
}
工作示例。
选择
预先计算有多少$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
工作示例。
推荐阅读
- php - 在 RESTful API 中重写 URL
- java - Runtime.exec 不会运行 javac,但命令行会
- r - 在 r 中创建一个稀疏矩阵,每行具有一组整数值
- javascript - 未运行 Jest+Enzyme API 模拟调用测试
- ocaml - 列表其余部分的模式匹配
- kotlin - 显示或隐藏小数
- php - 如何在两个php脚本之间切换
- google-apps-script - 如何在脚本中引用 Google 表格上的特定单元格?(最好在我离线时)
- python-3.x - 使用 args parser subparser set defaults 和导入函数的正确方法?
- opencl - 在 AMD GPU 上启动内核时查找计算单元 ID