由于我之前的问题简化,我正在尝试用PHP学习3D数组,但每一课都让我难以理解。
我准备了具有空3D(分层)数组的代码,但不知道如何:
echo $result_value[x][y][z]
给出
value
include_once 'connect.php';
$player_id = '6';
$result_value = array();
$pullMapInfo = "SELECT x, y, z, value FROM mapinfo WHERE id='{$player_id}'";
$pullMapInfo2 = mysql_query($pullMapInfo) or die(mysql_error());
while ( $pullMapInfo3 = mysql_fetch_assoc($pullMapInfo2) ) {
$result_value = array(
array(
array('', '', ''),
array('', '', ''),
array('', '', ''),
),
array(
array('', '', ''),
array('', '', ''),
array('', '', ''),
),
array(
array('', '', ''),
array('', '', ''),
array('', '', ''),
)
);
}
for($z = 1; $z <= 3; $z++){
for($x = 1; $x <= 16; $x++){
for($y = 1; $y <= 16; $y++){
# echo database row's divided among layers (z parameter) for ex.: 1,1,1 = red (X,Y,Z = color value) - 1 width & 1 height on 1st layer contains red value
# to get access to it like this: $result_value[x][y][z] => [value];
}
}
}
答案 0 :(得分:1)
populate it with data from MySQL database display it/reffer to it like: echo $result_value[x][y][z] gives value
人口阶段只是选择至少x
,y
,z
和value
字段。
然后,在循环中,您将检索所有数据。此时,您将检查是否存在阵列先决条件,如果它们不是您设置的,则设置值:
<?php
$db = mysql_connect($db_host,$db_user,$db_password) or die($error[0])
$arr3d = array();
/* Initialization to get a "dense" array
$z_row = array_fill(0, $max_z, '<DEFAULT>');
$y_row = array_fill(0, $max_y, $z_row);
$arr3d = array_fill(0, $max_x, $y_row);
unset($y_row, $z_row); // Do not waste memory
*/
$query = 'SELECT x, y, z, value FROM ...;' ;
$handle = mysql_query($query) or die("$query: error: " . mysql_error());
while($row = mysql_fetch_array($handle))
{
// $row is an array with x, y, z and value keys in this order
list($x, $y, $z, $value) = $row;
/* This if we had used mysql_fetch_assoc instead
$x = $row['x'];
$y = $row['y'];
$z = $row['z'];
$value = $row['value'];
*/
if (!isset($arr3d[$x]))
$arr3d[$x] = array();
if (!isset($arr3d[$x][$y]))
$arr3d[$x][$y] = array();
$arr3d[$x][$y][$z] = $value;
}
mysql_free_result($handle);
?>
如果你想要一个完整的(“密集”)数组,你必须先通过它们的所有值循环x,y和z,并为数组单元分配一个默认值,以便被SQL循环覆盖。
在上面的代码中,如果没有留下密集的补丁,如果没有x = 5,y = 2和z = 3的行,$ arr3d [5] [2] [3]将是未定义的。
答案 1 :(得分:0)
mysql_fetch_assoc($pullMapInfo2)
将返回一个数组,您可以使用该数组来获取播放器的X,Y和Z值,如下所示:
$x = $pullMapInfo3["x"]
$y = $pullMapInfo3["y"]
$z = $pullMapInfo3["z"]
如果你想把它放在你的result_value数组中,你可以简单地$result_value[$x][$y][$z] = $pullMapInfo3["value"]
。
此外,将$ result_value的初始化移出循环到您编写$result_value = array();
的位置:
for ($ix = 1; $ix <= 16; $ix++) {
$result_value[$ix] = array();
for ($iy = 1; $iy <= 16; $iy++) {
$result_value[$ix][$iy] = array();
}
}
然后你可以使用来自pastebin的循环。另请注意,您只需要在输出+ 768 <br>
标签处获得第1层,第2层,第3层,因此我不确定这是否是您的意图。