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
当我回显 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