php - 我如何在 php 中优化我的代码以进行循环
问题描述
在我的一个周期中,一个硬代码被固定为我正确写下代码的一个步骤。
根据步骤,阵列的深度会发生变化
for($i=0; $i < $size; $i += $step){
//WTF ?
if ($step == 1){
$values = $this->metricsValues(
$metrics,
$metricHeaders
);
}
if ($step == 2){
$values[$d[$i]][$d[$i + 1]] = $this->metricsValues(
$metrics,
$metricHeaders
);
}
if ($step == 3){
$values[$d[$i]][$d[$i + 1]][$d[$i + 2]] = $this->metricsValues(
$metrics,
$metricHeaders
);
}
if ($step == 4){
$values[$d[$i]][$d[$i + 1]][$d[$i + 2]][$d[$i + 3]] = $this->metricsValues(
$metrics,
$metricHeaders
);
}
}
解决方案
在我看来,这应该是这样的:
for ($i = 0; $i < $size; $i += $step) {
$target = &$values;
// max(1, $j) to suppress any action when $step == 1
for ($j = 0; max(1, $j) < $step; $j++) {
$target = &$target[$d[$i + $j]];
}
$target = $this->metricsValues(...);
}
推荐阅读
- java - Java switch 语句将变量从一种情况调用到另一种情况
- java - 如何解决 pom.xml 中的堆大小异常?
- php - Laravel fullcalendar-如何在当前用户上专门显示事件?
- php - 我使用 php 版本 5.2。该脚本在 000webhost 中运行,但是当我使用 yahoo 网络主机时它不起作用
- omnet++ - 静脉模拟,根据距离改变比特率
- node.js - 如何在 Dialogflow 回退意图中访问以前的对话详细信息
- c++ - *初学者* C++基础计算器
- mysql - 从 sql developer 转移到 mysql
- c - 如何在 C 中返回 long 的结束数字(特别是当它们为 0 时)
- javascript - 在使用 Javascript 或 HTML 提交之前修改输入值