【问题标题】:Are empty for loops in PHP considered bad practice?PHP中的空for循环是否被认为是不好的做法?
【发布时间】:2018-10-22 14:53:00
【问题描述】:

我目前正在编写一些代码来在 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;

代码工作并输出我需要的东西,但我不禁觉得这样的结构有问题。也许有更清晰的方法来做到这一点? (我问自己这个主要是因为我的代码将来不会由我维护,我希望它尽可能干净)

我在手册页或博客上找不到有关该主题的任何内容。是否普遍不赞成或更多取决于自己的意见?

【问题讨论】:

  • @RiggsFolly — 问题是关于最佳实践,而不是有效性。
  • @Quentin 我的回答是No!,尽管最佳实践并不是真正的主题
  • 绝对不是很可读。至少使用文档。
  • “代码将来不会由我维护,我希望它尽可能干净” - 那么你可能不应该使用这样的结构(在至少没有非常清晰的文档。)对于大多数开发人员来说,while 循环可能更具可读性。
  • 这绝对是不直观的阅读。您是否尝试过将循环重写为whiledo while

标签: php arrays loops for-loop


【解决方案1】:

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

【讨论】:

  • 缺少问题的最后一行,否则可以正常工作:3v4l.org/2gNCs
  • 感谢您的回答!在我的匆忙中,我忘记了好的 ol' while 循环,这绝对是一种更清洁的方式。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    • 2013-04-12
    • 2018-08-11
    • 2015-07-24
    • 1970-01-01
    • 2013-12-08
    • 1970-01-01
    相关资源
    最近更新 更多