根据步长的不同,阵列的深度会发生变化
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(...); }