php while循环不适用于用户定义的函数

时间:2014-02-26 12:36:41

标签: php

这样while循环工作正常:

$results = mysqli_query($dbcon, "SELECT `name`, `date` FROM `table1` WHERE `user` = $user_id);

while($data = mysqli_fetch_array($results)) {
    echo '<tr>
        <td>' . $data['name'] . '</td>
        <td>' . $data['date'] . '</td>
        </tr>'
}

但是它不想使用用户定义的函数。它只是无限地循环第一行:

function camp_data() {
    global $user_id;
    $query = mysqli_query($dbcon, "SELECT `name`, `date` FROM `table1` WHERE `user` = $user_id");
    return (mysqli_fetch_array($query));
}

while($data = camp_data()) {
    echo '<tr>
        <td>' . $data['name'] . '</td>
        <td>' . $data['date'] . '</td>
        </tr>'
}

当我执行print_r(mysqli_fetch_array($results))print_r(camp_data())时 - 两者都返回完全相同的数组。 这有什么不对?

2 个答案:

答案 0 :(得分:4)

无论您在外部调用该函数多少次,它都只会在第一行执行mysqli_fetch_array()。第二次调用该函数(在外部循环中的第二次迭代)将不知道它之前已执行并且不会进入下一行。同时在数组上循环并不是你可以拥有的最佳选择,它可能会导致无限循环。

您必须遍历函数中的结果并构建它们的数组。返回mysqli_fetch_array,不循环。

while($data = mysqli_fetch_array($results)) {
    $rows[] = $data;
}
return $rows

然后对您的函数执行foreach()

foreach (camp_data() as $data) {
   echo '<tr>
    <td>' . $data['name'] . '</td>
    <td>' . $data['date'] . '</td>
    </tr>'
}

答案 1 :(得分:0)

在每个interation中你调用camp_data()中的所有代码,而不仅仅是最后一行,所以重构它:

function camp_data($query) {
    return (mysqli_fetch_array($query));
}

//execute query only once
$query = mysqli_query($dbcon, "SELECT `name`, `date` FROM `table1` WHERE `user` = $user_id");

//fetch result row by row
while($data = camp_data($query)) {
    echo '<tr>
        <td>' . $data['name'] . '</td>
        <td>' . $data['date'] . '</td>
        </tr>'
}

如你所见,方法camp_data在这种情况下只是mysqli_fetch_array的简单包装器,因此它可以被mysqli_fetch_array替换