这就是代码现在的位置:
<ul>
<?php
while ($themes = $model->getAllThemes()) {
echo '<li>' . $themes->id . ' ' . $themes->title . '</li>';
}
?>
</ul>
$ themes数组如下所示:
Array
(
[0] => Theme Object
(
[id] => 11
[title] => NewTheme
)
[1] => Theme Object
(
[id] => 12
[title] => FakeTheme
)
)
当我测试它时,它几乎进入无限循环,所以我猜它不知道数组有多长?我试图避免必须计算数组中的项目,并且我对foreach循环语法非常粗略。
答案 0 :(得分:9)
由于getAllThemes
不是迭代器,因此应该总是返回非null / non-false,从而导致无限循环。您应该使用foreach
循环代替:
<?php
foreach ($model->getAllThemes as $themes) {
echo '<li>' . $themes->id . ' ' . $themes->title . '</li>';
}
?>
答案 1 :(得分:6)
您没有使用foreach循环。这样做:
foreach($model->getAllThemes() as $theme) {
echo '<li>' . $theme->id . ' ' . $theme->title . '</li>';
}
请注意,在循环内部我使用$theme
而不是$themes
。这是因为foreach循环从数组中取出顶部项目并将其分配给as
之后的变量。在这种情况下as $theme
。
你目前正在做的是使用while循环,里面有一个赋值。
while ($themes = $model->getAllThemes())
另一种写作方式,可能会让你的问题更加明显,就是:
while (($themes = $model->getAllThemes()) != false)
或者,更清楚的是,这个:
$themes = $model->getAllThemes();
while($themes != false)
由于$themes
由有效数组填充,因此它不会在循环中注册为空或false。这总是如此。你实际上并没有骑自行车穿过任何主题。您只是检查主题数组是否存在,以及是否确实存在循环。它总是存在,因此是无限循环。
实际的foreach循环将遍历数组中的每个主题,并允许您对其执行某些操作。它将更像你在while循环代码中所期望的那样。
答案 2 :(得分:1)
你正在寻找一个foreach循环:
foreach ($model->getAllThemes() as $themes) {
echo '<li>' . $themes->id . ' ' . $themes->title . '</li>';
}
同样看起来getAllThemes
是方法,而不是属性?
答案 3 :(得分:1)
阅读你的代码......
while ($themes = $model->getAllThemes){
// loop stuff
}
在这句话中,您正在执行以下步骤
您的代码实际上存在无限循环。