将多个数组合并成一个数组

3
我有这样一段代码,我希望获取一个包含所有值的单一数组。
$sql = "SELECT * FROM interest where interest='".$interest."' and userid!='".$myuserid."'";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) 
    {
        while($row = mysqli_fetch_assoc($result)) 
            {
                $userid = $row["userid"];

                if($searchtype == 'both')
                    {
                        $sql2 = "SELECT * FROM register where id='".$userid."' and  discover = 'on' and id!='".$myuserid."'";
                        $result2 = mysqli_query($conn, $sql2);
                        if (mysqli_num_rows($result2) > 0) 
                            {
                                while($row2 = mysqli_fetch_assoc($result2)) 
                                    {
                                        echo "<pre>";
                                        print_r($row2);
                                        echo "</pre>";
                                    }
                            }       
                    }
            }
    }

我得到的输出结果大致如下:
Array
(
    [id] => 1
    [email] => A1
    [username] =>B1 
    [password] => C1
    [gender] => C1
)

Array
(
    [id] => 2
    [email] => A2
    [username] => B2
    [password] => C2
    [gender] => D2
)
Array
(
    [id] => 3
    [email] => A3
    [username] => B3
    [password] => C3
    [gender] => D3
)

但我希望将所有数据存储在一个数组中,格式如下:
Array
(
    [0] => Array
        (
             [id] => 1
             [email] => A1
             [username] =>B1 
             [password] => C1
             [gender] => C1
        )

    [1] => Array
        (
            [id] => 2
            [email] => A2
            [username] => B2
            [password] => C2
            [gender] => D2
        )
     [2] => Array
        (
            [id] => 3
            [email] => A3
            [username] => B3
            [password] => C3
            [gender] => D3
        )
}

有人可以告诉我如何做到这一点吗?


你能否在问题中更新一个样本输出,以便我们了解您想要看到的结果?您希望数组中有多个“id”值,还是希望有一个“id”条目包含一组值? - Tim Biegeleisen
@Tim Biegeleisen更新了我的帖子。 - user4558489
一个重构建议:如果你只需要第一个查询中的 userid,为什么不能将第一个查询改为 "SELECT userid FROM interest where interest='".$interest."' and userid!='".$myuserid."'" - Suganthan Madhavan Pillai
3个回答

1
在您的代码开头创建一个数组变量,例如$a=array();
在循环中使用$a[]=your row value获取行值,然后在循环外打印此值,您将得到单个数组打印出的所有值。
print_r($a);

0
在 while 循环开始之前,先声明一个数组变量,例如 $user_data = array();,然后在内部循环中,使用 $user_data[] = $row2; 来设置值。
if (mysqli_num_rows($result) > 0) {
    $user_data = array();
    while($row = mysqli_fetch_assoc($result)) {
            $userid = $row["userid"];
            if($searchtype == 'both') {
                    $sql2 = "SELECT * FROM register where id='".$userid."' and  discover = 'on' and id!='".$myuserid."'";
                    $result2 = mysqli_query($conn, $sql2);
                    if (mysqli_num_rows($result2) > 0) {
                            while($row2 = mysqli_fetch_assoc($result2)) {
                                    $user_data[] = $row2;
                                }
                        }       
                }
        }
   print_r($user_data);   //Print here your user_data outside the loop.
}

虽然我得到了答案,但您能否告诉我为什么结果不能在循环内打印? - user4558489
你在循环中得到了结果,但它显示了单个数组记录,而你希望整个结果在单个数组中,因此需要创建$user_data变量。 - Sadikhasan
在这篇文章中,我展示了我的一部分代码。我只展示了if($searchtype == 'both')的一个条件,但是我还有另外两个基于$searchtype的条件,并且我希望单独打印每个条件的结果。但是如果我在外面打印结果,我将无法根据条件获得结果。 - user4558489
如果您已经得到了发布的问题的答案,那么可以在新帖子中提出新问题,最好给出最佳答案。 - Sadikhasan

0

你已经接近目标了,只需要定义一个数组并将每一行的数据保存在其中即可。

// array which contains all rows data
$all_rows = array();                                //  <------ step 1
if(mysqli_num_rows($result2)) 
{
   while($row2 = mysqli_fetch_assoc($result2)) 
   {
      // every record data is stored here
      $all_rows[] = $row2;                          //  <------ step 2
   }
} 
if(!empty($all_rows))
{
      print_r($all_rows);
}else
{
     echo "do some thing else since zero records fetched";
}  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接