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