php - 从 MySQL 查询构建多维 PHP 数组

标签 php mysql arrays multidimensional-array

我正在尝试从 MySQL 查询创建多维数组。该阵列有 3 层深。每个用户都有一个membershipid,该成员(member)id可以有多个characterid。每个 characterid 都可以有多个属性。

membershipid -> characterid (can be up tot 3) -> light, racehash.

    $query = "SELECT p.membershipid, p.displayname, c.characterid, c.light, c.racehash
    FROM Players as p
    LEFT JOIN Characters as c
    ON c.membershipid = p.membershipid";
    $result = $mysqli->query($query) or die("SQL Error: Members konden niet worden opgehaald.");

    // Loop through the requested data, add to an array
    while ($data = mysqli_fetch_assoc($result)) {
        $categorylist[ $data['membershipid'] ] = array(
                    'displayname' => $data['displayname'],
              array('characterid' => $data['characterid'],
                    'light' => $data['light'],
                          'racehash' => $data['racehash']
            )
                    );

    } // end while statement

// A test to see how many items in array          
echo "<pre>\n";
print_r($categorylist);    
echo "</pre>\n";  

此方法有效,但仅显示每个人的 1 个字符,而查询结果显示每个成员(member) ID 的每个字符 ID

    Array
(
    [4611686018428931875] => Array
        (
            [displayname] => White_Anomaly
            [0] => Array
                (
                    [characterid] => 2305843009264668680
                    [light] => 554
                    [racehash] => 3887404748
                )

        )

    [4611686018437972738] => Array
        (
            [displayname] => Bpunisher7
            [0] => Array
                (
                    [characterid] => 2305843009277456739
                    [light] => 392
                    [racehash] => 2803282938
                )

        )

SQL 查询的结果如下: query result

我的数组定义可能有问题,并且每次都会覆盖我的字符 ID,因为我只显示最新的 characterid

首选数组:

Array
(
    [4611686018428931875] => Array
        (
            [displayname] => White_Anomaly
            [characters] => Array
                (
                    [0] => Array
                        (
                            [characterid] => 2305843009264668678
                            [light] => 370
                            [racehash] => 3887404748
                        )
                    [1] => Array
                        (
                            [characterid] => 2305843009264668680
                            [light] => 554
                            [racehash] => 3887404748
                        )
                )
        )

    [4611686018437972738] => Array
        (
            [displayname] => Bpunisher7
            [characters] => Array
                (
                    [0] => Array
                        (
                            [characterid] => 2305843009265241161
                            [light] => 534
                            [racehash] => 2803282938
                        )
                    [1] => Array
                        (
                            [characterid] => 2305843009265241163
                            [light] => 524
                            [racehash] => 3887404748
                        )
                    [2] => Array
                        (
                            [characterid] => 2305843009277456739
                            [light] => 392
                            [racehash] => 3887404748
                        )
                )
        )
)

最佳答案

如果您允许我稍微重组您的结果数组,这应该是一个更好的方法:

// Loop through the requested data, add to an array
while ($data = mysqli_fetch_assoc($result)) {
    extract($data,EXTR_PREFIX_ALL,'data');
    $categorylist[$data_membershipid]['displayname']     = $data_displayname;
    $categorylist[$data_membershipid][$data_characterid] = ['light'    => $data_light,
                                                            'racehash' => $data_racehash];

} // end while statement

如您所见,我已将“characterid”移动为子数组的键。这样做是为了避免覆盖另一个字符。

我还使用了较新的数组表示法。 extract() 只是为了使代码更容易阅读,但您可以删除它。

也许最好将字符放入自己的数组中,如下所示:

// Loop through the requested data, add to an array
while ($data = mysqli_fetch_assoc($result)) {
    extract($data,EXTR_PREFIX_ALL,'data');
    $categorylist[$data_membershipid]['displayname'] = $data_displayname;
    $categorylist[$data_membershipid]['characters'][$data_characterid] = ['light'    => $data_light,
                                                                          'racehash' => $data_racehash];

} // end while statement

关于php - 从 MySQL 查询构建多维 PHP 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52624893/

相关文章:

mysql - 在 MySQL 中运行多个类别的总和

php - 从数据库中删除不工作使用 php

c++ - 用 %20 替换空格

php - 回复 : MySQL server not returning correct output

php - 尝试根据名称将 CSV 加载到 MySql 表中

mysql - 如何按特定时间段内的时间间隔进行分组?

php - 从数据库中获取两列并呈现为单个数组

javascript - 如何将一个对象数组放入另一个对象中?

php - 用于 API 的 Laravel 中间件身份验证

php - 如何将多个数组元素转换为对象