首页 > 解决方案 > 我如何在 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
        );
    } 
}

标签: php

解决方案


在我看来,这应该是这样的:

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(...);

}

推荐阅读