web-dev-qa-db-ja.com

PHP json_encode()を使用したJSON配列への配列。

組み込みのjson_encode();関数を使用して作成した配列をエンコードしました。次のような配列の配列の形式で必要です:

[["Afghanistan",32,12],["Albania",32,12]]

ただし、次のように返されます。

["2":["Afghanistan",32,12],"4":["Albania",32,12]]

Regexのトリックを使用せずにこれらの行番号を削除するにはどうすればよいですか?

60
Ryan Brodie

PHP配列の配列キーが連続した数字ではない場合、json_encode()mustはJavaScript配列が常にオブジェクトであるため、他の構成体をオブジェクトにします連続的に数値インデックスが付けられます。

PHPの外部構造で array_values() を使用して、元の配列キーを破棄し、ゼロベースの連続番号に置き換えます:

例:

// Non-consecutive 3number keys are OK for PHP
// but not for a JavaScript array
$array = array(
  2 => array("Afghanistan", 32, 13),
  4 => array("Albania", 32, 12)
);

// array_values() removes the original keys and replaces
// with plain consecutive numbers
$out = array_values($array);
json_encode($out);
// [["Afghanistan", 32, 13], ["Albania", 32, 12]]
137

json_encode()関数は、PHPでarrayJSONにエンコードするのに役立ちます。

特定のオプションなしでjson_encode関数のみを直接使用すると、配列が返されます。上記の質問のように

$array = array(
  2 => array("Afghanistan",32,13),
  4 => array("Albania",32,12)
);
$out = array_values($array);
json_encode($out);
// [["Afghanistan",32,13],["Albania",32,12]]

配列をJSONに変換しようとしているので、json_encodeの追加オプション(パラメータ)としてJSON_FORCE_OBJECTを使用することをお勧めします

<?php
$array=['Apple','orange','banana','strawberry'];
echo json_encode($array, JSON_FORCE_OBJECT);
// {"0":"Apple","1":"orange","2":"banana","3":"strawberry"} 
?>
9

Michael Berkowskiの答えに加えて、これは配列の順序が逆になった場合にも発生する可能性があります。この場合、jsonオブジェクトでは順序が昇順になるため、問題を観察するのは少し難しいです.

例えば:

[
    3 => 'a',
    2 => 'b',
    1 => 'c',
    0 => 'd'
]

戻ります:

{
    0: 'd',
    1: 'c',
    2: 'b',
    3: 'a'
}

したがって、この場合の解決策は、jsonにエンコードする前にarray_reverseを使用することです

6
Inc33

JSONの一般的な使用法は、Webサーバーからデータを読み取り、Webページにデータを表示することです。

この章では、クライアントとPHPサーバー間でJSONデータを交換する方法を説明します。

PHPには、JSONを処理するための組み込み関数がいくつかあります。

PHPのオブジェクトは、PHP関数json_encode()を使用してJSONに変換できます。

<?php
$myObj->name = "John";
$myObj->age = 30;
$myObj->city = "New York";

$myJSON = json_encode($myObj);

echo $myJSON;
?>
1

初期配列にインデックスを指定しない場合、通常の数値を取得します。配列には何らかの形の一意のインデックスが必要です

0
Ray