晚间!
我真的对此毫无头绪,想到自己,我会求助于所有人,以获得一些指导。我有一个直接从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"
}
[...]
}
我想要做的是合并x
和y
键相等的元素图像,创建一个新的数组,其中z
值成为键。可以有两个以上具有相同x
和y
值的元素,但z
值对于这些元素永远不会相同。有点难以解释,但所需的输出看起来像这样:
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"
}
[...]
}
到目前为止,我很乐意向你提供我的进展,但事实是我对这一点毫无头绪。 MySQL表如下所示:
| id | x | y | z | image |
+----+----+----+----+--------------------+
| 1 | 3 | 5 | 7 | 'ground/grass/1' |
| 2 | 3 | 5 | 8 | 'objects/nature/1' |
很抱歉这个问题很长。提前谢谢!
答案 0 :(得分:1)
您是否考虑在SQL查询中使用GROUP_CONCAT?像
这样的东西SELECT x, y, GROUP_CONCAT(CONCAT(z,':',image)) as image
FROM your_table
GROUP BY x, y
函数here的文档。
答案 1 :(得分:1)
以下是我为达到预期效果所做的工作:
我使用了来自wogsland’s的查询:
SELECT x, y, GROUP_CONCAT(CONCAT(z,':',image)) as image
FROM your_table
GROUP BY x, y
然后我循环查询结果(其中$map
包含结果):
foreach ($map as $i => $tile) {
$map[$i]['image'] = explode(',', $tile['image']);
$images = $map[$i]['image'];
$map[$i]['image'] = [];
foreach ($images as $image) {
$image = explode(':', $image);
$map[$i]['image'][$image[0]] = $image[1];
}
}
答案 2 :(得分:0)
这是一种在PHP中几乎完成你想做的事情的丑陋方式。数组在开头是$ arr,在$ out中是新数组:
<div id="flexWrapper">
<ul id="flexContainer">
<li class="flex-item">1</li>
<li class="flex-item">2</li>
<li class="flex-item">3</li>
<li class="flex-item">4</li>
<li class="flex-item">5</li>
</ul>
</div>
输出将是:
$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 );
}
}
'z'值被删除,因为它没有真正的用途,'image'总是一个以'z'值为键的数组!
我会使用三维数组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"
}
}
[...]
}
并跳过最后一步......