PHP中的空for循环被认为是错误的做法吗?

PHP中的空for循环被认为是错误的做法吗?,php,arrays,loops,for-loop,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) !=

我目前正在编写一段代码,以便在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;
代码工作并输出我需要的东西,但我忍不住觉得这样的结构有问题。也许有更清晰的方法?我这样问自己主要是因为我的代码将来不会被我维护,我希望它尽可能干净


我在手册页面或博客上找不到关于这个主题的任何内容。它通常是不受欢迎的还是更取决于自己的意见?

我会说它是一种不好的做法,因为即使它是有效的,我从经验中发现,将它重构为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;

我会说这是一种不好的做法,因为尽管它是有效的,但我从经验中发现,将它重构成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;

只是一个不同方法的建议,可能比循环更容易阅读

// 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 }

如果我继承了这个项目,我更喜欢这个,而不是一个解释性的评论。

只是一个不同方法的建议,可能比循环更容易阅读

// 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 }

如果我继承了这个项目,我更喜欢这个而不是解释性的评论。

@riggsfully-问题是关于最佳实践,而不是有效性。@Quentin,我的答案是否定的!尽管最佳实践并不在主题中,但它肯定不是很可读。至少要使用文档。“我以后不会维护代码,我希望它尽可能干净”-那么您可能不应该使用这样的结构,至少在没有非常清晰的文档的情况下。对于大多数开发人员来说,while循环可能更具可读性。这绝对不是直观的阅读方式。你有没有试过在一段时间内重写你的循环?RiggsFolly-问题是关于最佳实践,而不是有效性。@Quentin,我的答案是否定的!尽管最佳实践并不在主题中,但它肯定不是很可读。至少要使用文档。“我以后不会维护代码,我希望它尽可能干净”-那么您可能不应该使用这样的结构,至少在没有非常清晰的文档的情况下。对于大多数开发人员来说,while循环可能更具可读性。这绝对不是直观的阅读方式。您是否尝试过将循环重写为while或do-while?问题的最后一行已丢失,否则效果很好:谢谢您的回答!在匆忙中,我忘记了好的ol'while循环,这绝对是一种更干净的方法。问题的最后一行没有了,否则效果很好:谢谢你的回答!在匆忙中,我忘记了好的ol'while循环,这绝对是一种更干净的方式。