我创建一个循环遍历MySQL数据库的所有行的函数,然后使用与当前id为On的特定数据填充一堆锚标记。我的问题是它只会用信息填充第一个标签,而不是根据它应该在哪一行填充其他标签。该代码有望更好地解释这一点。
public function getLinks() {
$output = "";
$data = $this->_db->get('SELECT *', 'shutins', array('id', '>', 0));
echo $data->count(); // Currently returns 2
for($i = 1; $i < ($data->count() + 1); $i++) { // Set the count to 3 to make sure it should continue
$this->find($i); // Gets the first row only
$output .= "<a href=\"shutin.php?id={$this->data()->id}\" class=\"link\"><span>{$this->getName()}</span> <img class=\"next\" src=\"img/next.png\" width=\"20\"/></a>";
$i++; // Doesn't seem to increment then start again
}
return $output;
}
如果您需要查看更多我的代码文件,我很乐意提供它们。
答案 0 :(得分:1)
您正在对$i
变量进行双倍递增。 for循环的第三个“参数”是在每次迭代后执行 的语句。您的第一个循环将$i
作为1,然后当它开始时,第二次迭代$i
将为3。它会检查你的情况($i < ($data->count() + 1)
),这将是假的,循环将结束。
旁注;循环的第二个“参数”用于在每次迭代的开始处运行(和检查)语句。编写循环的更有效方法是:
for($i = 1, $count = $data->count() + 1; $i < $count; $i++) {
这是因为为填充$count
变量而执行的计数和加法只发生一次,而不是循环中的每次迭代。
答案 1 :(得分:1)
您正在循环中将$i
变量递增两次。除掉
来自你的循环的$i++; // Doesn't seem to increment then start again
for($i = 1; $i <= $data->count(); $i++) { // You can use "<=" instead of ($data->count() + 1) to make it simple
$this->find($i); // Gets the first row only
$output .= "<a href=\"shutin.php?id={$this->data()->id}\" class=\"link\"><span>{$this->getName()}</span> <img class=\"next\" src=\"img/next.png\" width=\"20\"/></a>";
}