我制作了一个多维数组,其中包含用户和他们创建的组,我有两个表用户和组,我设法创建一个数组,我想附加另一个数组使其多维,我需要帮忙。 这就是我所拥有的:
$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
)
)
)
答案 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);
注意,我还建议为第二个查询使用预备语句和位置参数 - 我只是重复您上面写的内容,以便更清楚地了解我所做的更改。但是,肯定是使用准备好的声明,即使这只是一个整数数据库字段 - 这是一个很好的习惯。