2016-11-27 18 views
1

次のコードで2次元配列を作成しようとしていますが、オブジェクトとしてJSONエンコードされています。これをどうやって解決するのですか?JSONエンコードされた2D配列を作成するにはどうすればよいですか?

$result = $bd->query("select * from contenidos where idfolleto=$idf order by fila"); 
$arr = array(); 

if ($result) { 
    while ($row = mysqli_fetch_object($result)) { 
     $filaAct = $row->fila; 
     $arr[$filaAct][] = (array) $row; 
    } 
}  

echo json_encode($arr); 

出力は次のようになります。

{ 
"1": [{ 
    "id": "6", 
    "idfolleto": "1", 
    "fila": "1", 
    "orden": "1", 
    "tipo": "carrousel", 
    "titulo": "", 
    "subtitulo": null, 
    "color1": null, 
    "color2": null, 
    "color_fondo": null 
}], 
"2": [{ 
    "id": "7", 
    "idfolleto": "1", 
    "fila": "2", 
    "orden": "1", 
    "tipo": "texto-imagenes", 
    "titulo": "Texto 1", 
    "subtitulo": null, 
    "color1": null, 
    "color2": null, 
    "color_fondo": null 
}, { 
    "id": "8", 
    "idfolleto": "1", 
    "fila": "2", 
    "orden": "2", 
    "tipo": "texto-imagenes", 
    "titulo": "Texto 2", 
    "subtitulo": null, 
    "color1": null, 
    "color2": null, 
    "color_fondo": null 
}], 
"3": [{ 
    "id": "9", 
    "idfolleto": "1", 
    "fila": "3", 
    "orden": "3", 
    "tipo": "texto-imagenes", 
    "titulo": "Texto 3", 
    "subtitulo": null, 
    "color1": null, 
    "color2": null, 
    "color_fondo": null 
}] 
} 
+0

アレイを戻したい場合は、 'json_decode($ arr、true)'を試してください。オブジェクトではなく配列の配列を取得します。 –

+0

しかし、json_decode()はパラメータ1が文字列 – Jaime

答えて

2

あなたがあなた自身の定義されたインデックスを使用せずに、インデックスにそれを持っているでしょう。

filaをインデックスとして使用し続ける必要がある場合は、エンコードされたJSONがオブジェクトであることを理解する必要があります。あなたはしかし、のような配列に戻し、それをjson_decodeすることができます:json_decode($json, 1);

そうでなければ、あなたが呼び出すことができ、アレイエンコードする前に:$arr = array_values($arr);あなたがjson_encodeを呼び出したら、JSON配列としてエンコードされた配列になります。

+0

であると考えています。実装を見直して、 "fila"をインデックスとして使用しないようにします。 ありがとう! – Jaime

2

filaフィールドに「インデックス」が含まれることを確信している場合は、intvalを使用して整数に変換できます。

if ($result) { 
    while ($row = mysqli_fetch_object($result)) { 
     $arr[intval($row->fila)][] = (array) $row; 
    } 
} 

それ以外の場合は、レコードをグループ化してグループの配列を作成する方がよいでしょう。

if ($result) { 
    $groups = array(); 
    while ($row = mysqli_fetch_object($result)) { 
     $groups[$row->fila][] = (array) $row; 
    } 
    $arr = array_values($groups); 
} 
+0

私は私の実装を見直して、 "フィラ"をインデックスとして回避するつもりだと思います。ありがとう! – Jaime

関連する問題