【问题标题】:Can I use while to do nothing in php and if possible is it a good practice or not?我可以使用 while 在 php 中什么都不做吗?如果可能的话,这是一个好习惯吗?
【发布时间】:2012-12-16 23:13:09
【问题描述】:

我想在 PHP 中做这样的事情

function doSomething() { /* ... */ }

while(my_array[] = doSomething()) { }

而不是使用额外的变量:while(myValue = doSomething()) { myArray[] = myValue; }

是否使用 while 块什么都不做?如果不是 - 为什么?

【问题讨论】:

  • 我个人认为 while 循环什么都不做是不好的做法。
  • @dudelgrincen 是的,你可以做到;当你说 PHP 不接受第一种语法时,你是什么意思?
  • 为我工作:$x = array(); while($x[] = rand(0,3)) { } var_dump($x);
  • 还请注意,您展示的两个示例是不同的。没有额外变量的一个将包含数组中的 falsey 值,而另一个则不会
  • 我的错......它有效 :) 我错过了一个括号......这里很晚,也许我应该去睡觉......我会编辑我的问题

标签: php loops while-loop


【解决方案1】:

从技术上讲,大括号用于在while 正文中对多个语句进行分组。你甚至不需要它们。例如。以下是完全有效的 PHP 代码:

while ($my_array[] = doSomething());
                                   ^

如您所见,这使用分号代替while 主体的语句(空语句)。 Demo

【讨论】:

  • 哦,是的,我忘了 :)
  • 很酷,但是为什么呢?它是否记录在某处(我在 php.net 上没有找到任何内容)?
  • 它记录在 php.net/whilephp.net/manual/en/… - 一个分号结束一个语句(将它与下一个语句分开),花括号允许您创建一个由多个语句组成的语句。
【解决方案2】:

是的,你可以。

$x = [];
while ($x[] = rand(0, 3)) { }
var_dump($x);

// array(4) {
//   [0]=>
//   int(4)
//   [1]=>
//   int(2)
//   [2]=>
//   int(2)
//   [3]=>
//   int(0)
// }

但是,如果您重新评估要解决的问题,您可能会发现不同的方法或构造可能会更好,并且不需要为此目的减少 while 构造。

【讨论】:

  • 有人注意到我的输出中的4 吗?
猜你喜欢
  • 2011-03-26
  • 2012-04-21
  • 2018-11-17
  • 2010-09-11
  • 1970-01-01
  • 2017-03-16
  • 1970-01-01
  • 2011-07-17
  • 1970-01-01
相关资源
最近更新 更多