3

以前の質問が単純化したので、PHPで3D配列を学習しようとしていますが、各レッスンを理解するのが難しくなっています。

空の3D(レイヤード)配列を使用してコードを準備しましたが、次の方法がわかりません。

  1. MySQLデータベースからのデータを入力します
  2. それを表示する/それを参照する: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];
}
}
}
4

2 に答える 2

1
populate it with data from MySQL database
display it/reffer to it like: echo $result_value[x][y][z] gives value

ポピュレーションステージは、少なくとも、、、およびフィールドを選択するxだけです。yzvalue

次に、ループで、すべてのデータを取得します。その時点で、アレイの前提条件が存在するかどうかを確認し、存在しない場合は設定して、値を設定します。

<?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]は未定義になります。

于 2012-09-13T11:41:58.577 に答える
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();
    }
}

次に、ペーストビンからのループを使用できます。また、出力+ 768<br>タグでレイヤー1、レイヤー2、レイヤー3を取得するだけなので、それが意図したものかどうかはわかりません。

于 2012-09-13T11:38:37.963 に答える