【问题标题】:How can you place query results into an arbitrarily large array?如何将查询结果放入任意大的数组中?
【发布时间】:2017-12-28 20:24:37
【问题描述】:

我有一个带有朋友列表的网站,等等。我使用 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 循环进行迭代。

【问题讨论】:

  • 我刚刚做了 print_r(...) 以表明正在生成一系列数组而不是一个
  • 对不起,getuser();是我编写的一个特殊函数,用于根据 uid 打印用户名

标签: php arrays loops mysqli


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    相关资源
    最近更新 更多