繁体   English   中英

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

[英]php while loop does not work with user-defined function

这样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()) -两者都返回绝对相同的数组。 怎么了

无论您从外部调用该函数多少次,它都只会在第一行执行mysqli_fetch_array() 第二次调用该函数(在外部循环的第二次迭代中)将不知道该函数是在之前执行的,因此不会继续进行下一行。 另外,在数组上进行while循环并不是您的最佳选择,这可能会导致无限循环。

您必须遍历函数中的结果并构建它们的数组。 返回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>'
}

在每次交互中,您都调用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM