错了还是对吗?循环

时间:2010-08-22 19:04:08

标签: php arrays while-loop

Heya家伙,我以前从来没有做过这种方法,我只是试着看看它是否会起作用,它就像一场梦一样。

通常人们倾向于这样做。

$tags = array();
while($row = $statement->FetchObject())
{
     $tags[] = $row;
}

但如果我这样做的话会更快或更少代码。

$tags = array();
while($tags[] = $statement->FetchObject()){}

只是好奇,这都是


更新

我确实理解Cleaner代码比Less代码要好得多,但因为我之前从未使用过这种方法,只是好奇只是为了利弊。

5 个答案:

答案 0 :(得分:15)

一般问题是,要退出while循环,需要返回“false”结果。在你的第二个例子中,这意味着在数组末尾会有一个“假”值(可能不是你想要的)。

这不是传统方法的问题,因为{false}赋予$row并且永远不会应用于数组。

至于性能或可读性,它们不是问题,因为代码没有按照你想要的那样做。

答案 1 :(得分:3)

如果您是数据库类允许它,只需使用预定义的方法来实现此目的。例如,PDO有fetchAll$statement->fetchAll(PDO::FETCH_OBJ)

答案 2 :(得分:1)

我发现前者更易读,更易于掌握,我确信两者之间的任何性能差异都是可以忽略不计的。

我全都是1)。

答案 3 :(得分:1)

你甚至可以跳过括号:

$tags = array();
while ($tags[] = $stmt->fetchObject());

该代码肯定有点短,因为它的形式更详细:

$tags = array();
while ($tag = $stmt->fetchObject()) {
    $tags[] = $tag;
}

然而哪一个更容易阅读?你可以说两者都很明显,实际上我会同意你的观点。但是哪一个在一般维护方面更容易?要以较短的形式添加$tag->doSth();之类的新语句,您必须完全重写它。在最后一个中,您只需添加该语句。

答案 4 :(得分:0)

当然,只要FetchObject()每次被调用时都适当地改变其返回值;)