通过php从mysql创建一个多维数组

时间:2017-06-25 23:10:37

标签: php mysql arrays multidimensional-array mysqli

我制作了一个多维数组,其中包含用户和他们创建的组,我有两个表用户和组,我设法创建一个数组,我想附加另一个数组使其多维,我需要帮忙。 这就是我所拥有的:

$sqlusers = $db->query("SELECT * FROM users");
$users = array();
WHILE($user = mysqli_fetch_array($sqlusers))
{
    $users[] = array(
       "userName" => $user['name'],
       "userPhone" => $user['phone']
    );

    $uid = $user['id'];
    $sqlgroup = $db->query("SELECT * FROM groups WHERE adminId =  '$uid'");
    $groups = array();
    WHILE($group = mysqli_fetch_array($sqlgroup))
    {
        $groups[] = $group['groupName'];
    }
}
print_r($groups);
?>

我需要这样的结果:

Array ( 
       [0] => Array ( 
                      [userName] => Bebe Claudette 
                      [userPhone] => 185022455 
                      [userGroup] => Array (
                                            [groupName] => TestGroup1
                                            )
                    ) 
       [1] => Array ( 
                      [userName] => MUHIRWA Clement 
                      [userPhone]=> 0785432238
                      [userGroup] => Array (
                                            [groupName] => TestGroup2
                                            )
                    )
      )

2 个答案:

答案 0 :(得分:1)

使用联接查询获取2个表的结果。尝试这样的事情(未经测试):

SELECT u.*, g.* FROM users as u INNER JOIN groups as g ON u.id = g.adminId; 

现在,如果循环搜索结果,您将获得2个表中的数据。

答案 1 :(得分:0)

您还没有明确说明为什么以上内容不起作用,但我会继续并假设它,因为您已在嵌入内嵌套了一个查询另一个阶段(而不仅仅是你忘记在构建群组数组之后为当前用户设置'成员,你在上面的代码中做了btw!)

您可以在这里使用几个选项,但最安全的只是展开两个选项 - 获取所有用户,然后预测用户并设置组。例如:

$sqlusers = $db->query("SELECT * FROM users");
$users = array();
WHILE($user = mysqli_fetch_array($sqlusers))
{
    $users[] = array(
        "userID" => $user['id'];
        "userName" => $user['name'],
        "userPhone" => $user['phone']
    );
}
foreach ($users as $i => $user) {
    $groups = array();
    $sqlgroup = $db->query("SELECT * FROM groups WHERE adminId = '$user['userID']'");
    WHILE($group = mysqli_fetch_array($sqlgroup))
    {
        $groups[] = $group['groupName'];
    }
    $users[$i]['userGroups'] = $groups;
}
print_r($groups);

注意,我还建议为第二个查询使用预备语句和位置参数 - 我只是重复您上面写的内容,以便更清楚地了解我所做的更改。但是,肯定是使用准备好的声明,即使这只是一个整数数据库字段 - 这是一个很好的习惯。