2016-10-09 19 views
0

JSON形式で.phpから配列を返すことを目指しています。JSONレスポンスとして多次元配列

.PHPは、以下である:私のAJAX応答ハンドラで

$json = array(//this is AJAX response 
     "status" => null, 
     "username" => null, 
     "population" => null, 
     "food" => null, 
     "water" => null, 
     "map" => null //this to be an array of tiles 
    ); 

$sql = "SELECT * FROM players_map_test WHERE player_id = :value"; 
    $stmt = $pdo->prepare($sql); 
    $stmt->bindParam(':value', $value, PDO::PARAM_INT); 
    $stmt->execute(); 
    $result = $stmt->fetch(PDO::FETCH_ASSOC); 

    foreach ($result as $row) { 
     $json["map"]["tile_health"] = $row["tile_health"]; 
     $json["map"]["tile_id"] = $row["tile_id"]; 
     $json["map"]["tile_level"] = $row["tile_level"]; 
     $json["map"]["tile_type"] = $row["tile_type"]; 
    } 
echo json_encode($json); 

、私は期待する形式のMySQL DB取り込まれたデータの別のアレイ(49 DB行、4列のそれぞれ)を含むようにそのアレイそのサブ配列にresponse.mapとしてアクセスし、通常の方法で要素を処理します:response.map [0]。

私は(応答)にconsole.logすると、すべてのキーの値として、私はマップが存在していることがわかり、それが配列でないと、それは「1」が含まれています

map:Object 
    tile_health:"1" 
    tile_id:"1" 
    tile_level:"1" 
    tile_type:"1" 

私が間違って何をやっています?

+0

'$のJSONを[ "マップ"] [ "tile_health"] = $行[ "tile_health"];':あなたはで自分の価値観を上書きしていますループ。 – jeroen

答えて

0

構文は次です:あなたは値を上書きした

foreach ($result as $row) { 
    $json["map"][] = [ 
     "tile_health" => $row["tile_health"], 
     "tile_id" => $row["tile_id"], 
     "tile_level" => $row["tile_level"], 
     "tile_type" => $row["tile_type"] 
    ]; 
} 

。 below--

foreach ($result as $row) { 
    $json["map"][] = $row; 
} 

+0

残念ながら、 "unexpected" ['"]というエラーが発生しました。私が配列(...)に変更した場合。結果は奇妙です:すべてのキーは同じ値を持っています。 – Vadimster

+0

フェッチの代わりにfetchAllを使用しようとしましたか? –

+0

私はこれを実際に探していますが、代わりにwhileループにfetch()ステートメントを置いています!私はそれがうまくいきたい私はfetch()が1つの結果しか返さないことを忘れていました。 – Vadimster

1

更新あなたのforeachループは、以下のコードを

#$result = $stmt->fetch(PDO::FETCH_ASSOC); 
$result = $stmt->fetchAll(PDO::FETCH_ASSOC); 

注意を変更:は()関数の戻り値のみ1行をフェッチします。 fetchAll()関数は複数の行を返します。

+0

これはいくつかの結果をもたらすようですが、残念ながら私は49行ではなく1行のデータしか持っていません。その行のIDは49だけど...何かをもう一度上書きしているようだ? – Vadimster

+0

私は自分の答えを更新しました。私の答えをチェックしてください。 @Vadimster –

+0

または、$ json ["map"] [] = $ resultを割り当てることができます。 fetchAll()@ Vadimsterを使用した後 –

0

あなたはこのようなあなたのデータベースの一部を簡略化することができます。

// request only needed columns 
$sql = "SELECT tile_health, tile_id, tile_level, tile_type 
     FROM players_map_test WHERE player_id = :value"; 

$stmt = $pdo->prepare($sql); 
$stmt->bindParam(':value', $value, PDO::PARAM_INT); 
$stmt->execute(); 
$result = $stmt->fetchAll(PDO::FETCH_ASSOC); 

// output was already in the type of array 
$json["map"] = $result; 

// encode and display 
echo json_encode($json);