我有一个很有趣的小程序,但是我不确定嵌套循环是获得最终结果的最有效方法。
我有以下数据:
Name qty sub
Widget_1 | 100 | 5
Widget_2 | 500 | 10
Widget_3 | 1000 | 15
我是什么
打算
qty
然后除以
sub
term
. 所以我在数组中创建了另一个键:
$widget_1['term] = $widget_1['qty'] / $widget_1['sub'];
现在我有了
Array
(
[0] => Array
(
[name] => Widget 1
[qty] => 100
[sub] => 5
[term] => 20
)
[1] => Array
(
[name] => Widget 2
[qty] => 500
[sub] => 10
[term] => 50
)
[2] => Array
(
[name] => Widget 3
[qty] => 1000
[sub] => 15
[term] => 67 //Rounded from 66.6
)
)
学期
,添加
附属的
到下面
widget
例如,在
$widget[0]
在任期内
属于
30
离开去
$widget[1]
以及
属于
300
在那一点上,我认为
的
附属的
并将其添加到
的
,有效减少剩余
学期
对于
widget[1]
.
$widget[1]
的
期限变成
20
--有效减少
的
实际的
任期至40年。
然后在最后
的
学期
共40个——取
$widget[1]
的
并将其添加到
$widget[2]
40年的任期已经过去了
$widget[2]
低于15分。制作
$widget[2]'s
数量
400英镑。我接受
的聚合
附属的
共15个,并将其添加到
的原始版本
赚30英镑。这个
更新
学期
对于
$widget[2]
$widget[2]
实际的
全部的
54而不是67
这是我的程序——运行它的命令行,它按预期运行——我只是好奇这是否是最佳实践,或者是否有更有效的使用
functions
/
loops
? 也许只有我一个人,但这感觉很“乱”。正在检查
数量
大于
小于0等。是否有更好的算法以更干净、更有效的格式获得相同的结果?
<?php
$widgets = array();
$widgets[0]['name'] = 'Widget 1';
$widgets[0]['qty'] = 100;
$widgets[0]['sub'] = 5;
$widgets[0]['term'] = $widgets[0]['qty'] / $widgets[0]['sub'];
$widgets[1]['name'] = 'Widget 2';
$widgets[1]['qty'] = 500;
$widgets[1]['sub'] = 10;
$widgets[1]['term'] = $widgets[1]['qty'] / $widgets[1]['sub'];
$widgets[2]['name'] = 'Widget 3';
$widgets[2]['qty'] = 1000;
$widgets[2]['sub'] = 15;
$widgets[2]['term'] = $widgets[2]['qty'] / $widgets[2]['sub'];
$mySub = 0;
$comp_term = 0;
foreach ($widgets as $widget){
$agregated_term = 0;
$sub = $widget['sub'];
$mySub = $mySub + $sub;
$term = $widget['term'];
$myQty = $widget['qty'];
echo "##########################################################################\n";
echo "Sub = " . $widget['sub'] . " | My Sub = $mySub | Term = $term | Previous Term = $comp_term\n";
echo "##########################################################################\n";
$agregated_term = 0;
for ($x = 0; $x < $term; $x++) {
$agregated_term++;
if($myQty < $mySub && $myQty > 0){
$myQty = $mySub;
}
if ($agregated_term < $comp_term){
if($myQty === 0){
break;
}
$myQty = $myQty - $sub;
echo "$agregated_term | $myQty\n";
}else{
if($myQty === 0){
break;
}
$myQty = $myQty - $mySub;
echo "$agregated_term | $myQty -- agregated\n";
}
}
$comp_term = $agregated_term;
}
?>