Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从MySQL查询构建多维PHP数组_Php_Mysql_Arrays_Multidimensional Array - Fatal编程技术网

从MySQL查询构建多维PHP数组

从MySQL查询构建多维PHP数组,php,mysql,arrays,multidimensional-array,Php,Mysql,Arrays,Multidimensional Array,我正在尝试从MySQL查询创建多维数组。这个阵列有3层深。每个用户都有一个成员身份id,此成员身份id可以有多个字符。每个characterid都可以有多个属性 membershipid->characterid(最多可以是3个)->灯光、杂色 SQL查询的结果如下所示: 我的数组定义可能有问题,每次都会覆盖我的characterid,因为我只显示最新的characterid 首选阵列: // Loop through the requested data, add to an array w

我正在尝试从MySQL查询创建多维数组。这个阵列有3层深。每个用户都有一个
成员身份id
,此成员身份id可以有多个
字符。每个
characterid
都可以有多个属性

membershipid->characterid(最多可以是3个)->灯光、杂色

SQL查询的结果如下所示:

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

首选阵列:

// 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

如果$categorylist[$data['membershipid']]存在,它将被下一个字符覆盖


您必须检查$categorylist[$data['membershipid']]是否存在。在本例中,使用array_push()添加第二个字符。否则您的代码仍然有效。

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

// 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
如您所见,我已将“characterid”移动为子数组的键。这样做是为了不覆盖其他字符

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

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


谢谢,这帮助我将正确的数据放入数组。现在,我可以通过这个数组循环构建一个表来显示信息。如果我可以跟进您的解决方案。我已经实现了你所说的,但是如果我想从创建的数组中打印出数据,我该怎么做呢?由于数组中的所有内容都有不同的(字符)id。我在答案中添加了一些内容,但我不太理解你的问题。您能具体说明“从创建的数组打印数据”的意思吗?
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
// 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