在PHP中将for循环设为空是否被视为不良做法?

时间:2018-10-22 14:53:00

标签: php arrays loops for-loop

我目前正在编写一些代码,以将关联数组的值在PHP 7.0中向右移,并且使用了其中没有指令的for循环:

$array = array("one" => 1, "two" => 2, "three" => 3, "four" => 4);
$first = reset($array);
$last = end($array);

for (end($array); current($array) !== $first && key($array) !== null; $array[key($array)] = prev($array)){
    continue;
}
$array[key($array)] = $last;

代码可以正常工作并输出所需的内容,但是我不禁感到这种结构有问题。也许有一种更清晰的方法? (我之所以这样问自己,主要是因为将来我的代码将不再由我维护,并且我希望它尽可能整洁)

我在手册页或博客上找不到关于此主题的任何内容。通常会皱起眉头,还是更多地取决于自己的看法?

2 个答案:

答案 0 :(得分:7)

我会说这是一种不好的做法,因为即使它是有效的,但根据经验,我发现将其重构为while循环几乎总是使其更具可读性。

$array = array("one" => 1, "two" => 2, "three" => 3, "four" => 4);
$first = reset($array);
$last = end($array);

while (current($array) !== $first && key($array) !== null) {
    $array[key($array)] = prev($array);
}

$array[key($array)] = $last;

答案 1 :(得分:0)

只是对另一种方法的建议,它可能比循环更容易阅读。

// save the keys
$keys = array_keys($array);
// shift the values right
array_unshift($array, array_pop($array));
// restore the keys
$array = array_combine($keys, $array);

关于将来将由谁维护项目的问题,无论是您还是其他人,您都应该尝试编写代码,以使每个部分都可以做什么。一种简单的方法:

function shift_values_right(array $array) {  // code that does that }

如果我继承了该项目,相对于解释性注释,我更愿意这样做。