首页 > 解决方案 > 在 PHP MySQL 中连接表时的二维数组

问题描述

我有以下表格projects

+----+----------+-------+------------+
| id | name     | admin | timestamp  |
+----+----------+-------+------------+
|  1 | Group1   |     2 | 1539678214 |
|  2 | Test     |     2 | 1539678214 |
+----+----------+-------+------------+

并且users

+----+----------------+------------------------+
| id | name           | email                  |
+----+----------------+------------------------+
|  1 | FOO            | foo@bar.com            |
|  2 | BAR            | bar@foo.com            |
|  3 | G2W            | far@boo.com            |
+----+----------------+------------------------+

我运行以下 SQL 命令:

SELECT projects.id,projects.name,users.id as userid,users.email 
FROM projects 
INNER JOIN users ON users.id=projects.admin;

我得到以下结果:

+----+----------+--------+-----------------+
| id | name     | userid | email           |
+----+----------+--------+-----------------+
|  1 | Group1   |      2 | bar@foo.com     |
|  2 | Test     |      2 | bar@foo.com     |
+----+----------+--------+-----------------+

这是完美的,这正是我所需要的。现在我的问题是,在 PHP 中执行此操作并在二维数组中获取结果的最佳方法是什么。

这是我到目前为止所拥有的,但我得到了一个一维数组的结果,这是我不想要的:

$stmt = $_DB->prepare("SELECT projects.id,projects.name,users.id as userid,users.email 
                       FROM projects 
                       INNER JOIN users ON users.id=projects.admin");
if($$_DB->error) die($$_DB->error);

$stmt->execute();
$res=$stmt->get_result();
while($result[]=$res->fetch_array(MYSQLI_ASSOC)){}
print_r($result);

结果:

[0] => Array
    (
        [id] => 1
        [name] => Group1
        [userid] => 2
        [email] => bar@foo.com
    )

[1] => Array
    (
        [id] => 2
        [name] => Test
        [userid] => 2
        [email] => bar@foo.com
    )

这就是我要的:

[0] => Array
    (
        [id] => 1
        [name] => Group1
        [admin] => Array
            (
                [id] => 2
                [email] => bar@foo.com
            )

    )

[1] => Array
    (
        [id] => 2
        [name] => Test
        [admin] => Array
            (
                [id] => 2
                [email] => bar@foo.com
            )

    )

标签: phpmysql

解决方案


查询结果将始终采用表格格式(行和列)。基本上,它将是一个数组数组,其中二级数组代表一个特定的行。如果您希望结果位于多维数组中,则必须在获取查询输出后使用 PHP 代码执行此操作:

$res=$stmt->get_result();

// Initialize result variable
$result = array();

// Get results row by row
while( $row = $res->fetch_array(MYSQLI_ASSOC) ) {

    // In a temp variable, create the multi-dim array as you wish
    $temp['id'] = $row['id'];
    $temp['name'] = $row['name'];
    $temp['admin'] = array('id' => $row['userid'], 
                           'email' => $row['email']);

    // insert the temp result row
    $result[] = $temp;
}
print_r($result);

推荐阅读