Php 堆叠阵列元素
晚上好 我真的对此一无所知,我想我应该向你们寻求一些指导。我有一个数组,直接从MySQL表中获取,如下所示:Php 堆叠阵列元素,php,mysql,arrays,Php,Mysql,Arrays,晚上好 我真的对此一无所知,我想我应该向你们寻求一些指导。我有一个数组,直接从MySQL表中获取,如下所示: array(106) { [...] [32]=> array(4) { ["x"]=> int(3) ["y"]=> int(5) ["z"]=> int(7) ["image"]=> string(14) "ground/grass/1" } [33]=> ar
array(106) {
[...]
[32]=>
array(4) {
["x"]=>
int(3)
["y"]=>
int(5)
["z"]=>
int(7)
["image"]=>
string(14) "ground/grass/1"
}
[33]=>
array(4) {
["x"]=>
int(3)
["y"]=>
int(5)
["z"]=>
int(8)
["image"]=>
string(16) "objects/nature/1"
}
[34]=>
array(4) {
["x"]=>
int(4)
["y"]=>
int(5)
["z"]=>
int(7)
["image"]=>
string(14) "ground/grass/1"
}
[...]
}
array(106) {
[...]
[32]=>
array(4) {
["x"]=>
int(3)
["y"]=>
int(5)
["z"]=>
int(7)
["image"]=>
array(2) {
[7]=>
string(14) "ground/grass/1"
[8]=>
string(16) "objects/nature/1"
}
}
[34]=>
array(4) {
["x"]=>
int(4)
["y"]=>
int(5)
["z"]=>
int(7)
["image"]=>
string(14) "ground/grass/1"
}
[...]
}
| id | x | y | z | image |
+----+----+----+----+--------------------+
| 1 | 3 | 5 | 7 | 'ground/grass/1' |
| 2 | 3 | 5 | 8 | 'objects/nature/1' |
我想做的是合并元素的图像,其中x
和y
键相等,创建一个新数组,其中z
值成为键。可以有两个以上的元素具有相同的x
和y
值,但这些元素的z
值永远不相同。有点难以解释,但所需的输出如下所示:
array(106) {
[...]
[32]=>
array(4) {
["x"]=>
int(3)
["y"]=>
int(5)
["z"]=>
int(7)
["image"]=>
string(14) "ground/grass/1"
}
[33]=>
array(4) {
["x"]=>
int(3)
["y"]=>
int(5)
["z"]=>
int(8)
["image"]=>
string(16) "objects/nature/1"
}
[34]=>
array(4) {
["x"]=>
int(4)
["y"]=>
int(5)
["z"]=>
int(7)
["image"]=>
string(14) "ground/grass/1"
}
[...]
}
array(106) {
[...]
[32]=>
array(4) {
["x"]=>
int(3)
["y"]=>
int(5)
["z"]=>
int(7)
["image"]=>
array(2) {
[7]=>
string(14) "ground/grass/1"
[8]=>
string(16) "objects/nature/1"
}
}
[34]=>
array(4) {
["x"]=>
int(4)
["y"]=>
int(5)
["z"]=>
int(7)
["image"]=>
string(14) "ground/grass/1"
}
[...]
}
| id | x | y | z | image |
+----+----+----+----+--------------------+
| 1 | 3 | 5 | 7 | 'ground/grass/1' |
| 2 | 3 | 5 | 8 | 'objects/nature/1' |
我很乐意向你们提供我目前的进展情况,但事实是我在这一点上一无所知。MySQL表如下所示:
array(106) {
[...]
[32]=>
array(4) {
["x"]=>
int(3)
["y"]=>
int(5)
["z"]=>
int(7)
["image"]=>
string(14) "ground/grass/1"
}
[33]=>
array(4) {
["x"]=>
int(3)
["y"]=>
int(5)
["z"]=>
int(8)
["image"]=>
string(16) "objects/nature/1"
}
[34]=>
array(4) {
["x"]=>
int(4)
["y"]=>
int(5)
["z"]=>
int(7)
["image"]=>
string(14) "ground/grass/1"
}
[...]
}
array(106) {
[...]
[32]=>
array(4) {
["x"]=>
int(3)
["y"]=>
int(5)
["z"]=>
int(7)
["image"]=>
array(2) {
[7]=>
string(14) "ground/grass/1"
[8]=>
string(16) "objects/nature/1"
}
}
[34]=>
array(4) {
["x"]=>
int(4)
["y"]=>
int(5)
["z"]=>
int(7)
["image"]=>
string(14) "ground/grass/1"
}
[...]
}
| id | x | y | z | image |
+----+----+----+----+--------------------+
| 1 | 3 | 5 | 7 | 'ground/grass/1' |
| 2 | 3 | 5 | 8 | 'objects/nature/1' |
很抱歉问了这么长的问题。提前谢谢 您是否考虑过在SQL查询中使用GROUP_CONCAT?差不多
SELECT x, y, GROUP_CONCAT(CONCAT(z,':',image)) as image
FROM your_table
GROUP BY x, y
函数的文档。以下是我为实现预期结果所做的工作: 我使用了答案中的查询: 然后我循环查询结果(其中
$map
包含结果):
这是一种在PHP中几乎实现您想要的功能的丑陋方式。数组开头以$arr为单位,新数组以$out为单位:
$res = array();
$out = array();
foreach( $arr as $item ) {
$res[$item['x']][$item['y']][$item['z']] = $item['image'];
}
foreach( $res as $k => $v ) {
foreach( $v as $n => $m ) {
$out[] = array( 'x' => $k, 'y' => $n, 'image' => $m );
}
}
输出将是:
array(106) {
[...]
[32]=>
array(4) {
["x"]=>
int(3)
["y"]=>
int(5)
["image"]=>
array(2) {
[7]=>
string(14) "ground/grass/1"
[8]=>
string(16) "objects/nature/1"
}
}
[34]=>
array(4) {
["x"]=>
int(4)
["y"]=>
int(5)
["image"]=>
array(1) {
[7]=>
string(14) "ground/grass/1"
}
}
[...]
}
“z”值被删除,因为它没有实际用途,“image”始终是一个以“z”值为键的数组
我会使用三维数组
$res['x']['y']['z']
并跳过最后一步…是的,我正在查看它,但问题是,在执行此操作时,我丢失了一行/部分行的z
值。我将对它进行更多的研究,看看我能完成什么。OIC-您可以通过在其中嵌套一个CONCAT来实现这一点(请参见上面的编辑)。