while循环外如何输出结果

how to output result outside while loop

当我回显 while 循环内的输出时,它给出了我期望的所有结果。 然而,当我在外面回声时,我只听到一个。我知道如果我使用数组,它会给我预期的结果,但不知道如何。 由于某些未知原因,我不喜欢数组,并且一直在避免使用它们。

$sql="select concat(p.firstName,' ',p.lastName) as parents 
from parent p,
parentstudent ps,
student s
where p.parent_id = ps.parent_id
and s.student_id = ps.student_id
and p.parent_id IN ('".$_SESSION['list'][1]."','".$_SESSION['list'][2]."','".$_SESSION['list'][3]."','".$_SESSION['list'][4]."' )";

$result = $conn->query($sql);
if($result->num_rows > 0) {
while($row = $result->fetch_object()) {
        echo $participants = $row->parents."  ";
    }
}

要使用数组选项真的很简单 - 您首先需要在循环开始之前声明您的数组,如下所示:

$arr = array();

我们这样做是为了确保 $arr 保留在 while 循环内外的范围内。然后在循环中,将项目添加到数组中,如下所示:

$arr[] = $row->parents;

结合这个,我们得到我们的代码:

$arr = array();
$result = $conn->query($sql);
if($result->num_rows > 0) {
while($row = $result->fetch_object()) {
    $arr[] = $row->parents;
}

print_r($arr);

如果在构建数组后想要重新访问每个 element/parent 值,只需再次遍历数组,您可以这样做:

foreach($arr as $parent) {
    echo $parent . " ";
}

或者,您可以使用 implode() 将数组的所有元素连接在一起,从而打印出您在循环中打印的相同字符串:

print implode(" ", $arr);

要创建一个绑定到父级的准备好的语句,我们还需要构建一个占位符数组 - 我们可以使用 array_fill() 来完成。我们需要为 $arr 的每个元素一个占位符,我们可以这样实现:

$placeholders = array_fill(0, count($arr), "?");

这表示要构建一个数组,从第一个(第 0 个)元素开始,元素数量与 $arr 相同,并用问号填充它(pdo 占位符 - 我想这就是你想要的想用?)

然后我们可以像这样构建准备好的语句(假设 PDO):

$stmt = $pdo->prepare('select .... where X IN (' . implode(",", $placeholders) . ')');

这将构建一个看起来像
的语句 select .... where X IN ( ?, ?, ?, ... ? )。 因为您的数组中有很多占位符。

然后你可以只执行语句,并传递它 $arr 来填充那些占位符:

$stmt->execute($arr);

如果你改用 mysqli,它应该是相似的。

如果您根本不需要数组(为什么不呢?),那么只需创建一个字符串容器,

然后在循环下不断拼接字符串,最后回显:

$participants = ''; // initialize
while($row = $result->fetch_object()) {
    $participants .= $row->parents . "  ";
               // ^ concat
}
echo $participants;

您当前代码中的问题是每个循环 $participants 都会被覆盖:

echo $participants = $row->parents."  ";
             //    ^ overwrites it every iteration