我有一个有朋友列表的网站,等等。我使用while循环迭代列表,我想使用foreach循环。
while循环的工作原理与它应该没有问题。我不问如何使用foreach循环。但是当我尝试更改while循环时,我意识到以下代码;
<?php
$my_id = $_SESSION['user_id'];
$request = "SELECT `request_from` FROM `friend_requests` WHERE `request_to`='$my_id' ";
$request_query = mysqli_query($conn, $request);
while ($run_request = mysqli_fetch_array($request_query)){
$from = $run_request['request_from'];
$username = getuser($from, 'username');
echo"<table>";
echo "<tr><td>".$username."</td></tr>";
echo "</table>";
echo "<br />";
}
output:
sammy davis jr
frank sinatra
dean martin
不包含包含朋友的 AN 数组,它包含任意数量的数组,其中只包含一个元素。就像我做的那样
print_r($runrequest);
output:
Array ( [0] => 20 [request_from] => 20 )
Array ( [0] => 21 [request_from] => 21 )
Array ( [0] => 19 [request_from] => 19 )
所以我的问题是,有没有办法让我重写我的 mysqli_query ,这样我就只生成一个任意大的数组,然后用foreach循环迭代。与我生成任意数量的数组的查询相反,我必须使用while循环进行迭代。
答案 0 :(得分:1)
$run_request
是每次迭代只有1行/结果的数组。如果你想要一个包含所有数据的数组在循环中构建它。您不需要getuser
功能,您可以使用join
通过一个查询获取用户的姓名。
$request = "SELECT u.name as name FROM `friend_requests` as fr
join users as u
on u.userid = fr.request_from
WHERE `request_to`='$my_id' ";
$request_query = mysqli_query($conn, $request);
while ($run_request = mysqli_fetch_array($request_query)){
$users[] = $run_request['name'];
}
print_r($users);
或者您可以使用http://php.net/manual/en/mysqli-result.fetch-all.php。