使用foreach循环遍历MySQL中的所有行

时间:2015-02-19 04:03:56

标签: php html mysql

我创建一个循环遍历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;
    }

如果您需要查看更多我的代码文件,我很乐意提供它们。

2 个答案:

答案 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>";

}