我目前正在编写一些代码,以将关联数组的值在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;
代码可以正常工作并输出所需的内容,但是我不禁感到这种结构有问题。也许有一种更清晰的方法? (我之所以这样问自己,主要是因为将来我的代码将不再由我维护,并且我希望它尽可能整洁)
我在手册页或博客上找不到关于此主题的任何内容。通常会皱起眉头,还是更多地取决于自己的看法?
答案 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 }
如果我继承了该项目,相对于解释性注释,我更愿意这样做。