ホームページ  >  記事  >  バックエンド開発  >  配列をjsonに変換した結果は配列ですか、それともオブジェクトですか? (旅行記)

配列をjsonに変換した結果は配列ですか、それともオブジェクトですか? (旅行記)

藏色散人
藏色散人転載
2021-01-19 15:57:353600ブラウズ

お勧め: 「PHP ビデオ チュートリアル

最近、仕事中によくこのような問題に遭遇するので、記録しておきます~

こちらは見てください、json_encode後の結果は文字列ばかりですが、最近はインターフェースのデータが書き込まれることが多くなり、このような問題がよく起こるため、ここで述べた結果はフロントエンドに転送した後の結果です。は PHP でのみ表示されます。その場合、それらはすべて配列になる可能性があります...

質問: 配列を JSON に変換するとき、それらはオブジェクトである場合と配列である場合がありますか?

ケース 1:

$arr = [1,2,3];//数组下标从0开始的
echo json_encode($arr);     //[1,2,3] 

$arr = [1=>1,2=>2,3=>3];//数组下标不是从0开始
echo json_encode($arr);//{"1":1,"2":2,"3":3}

現時点で配列を返す必要がある場合は、次のように処理できます

$arr = [1=>1,2=>2,3=>3];
echo json_encode(array_values($arr));//[1,2,3]

ケース 2:

$arr = [];
$arr[0] = 'xxx';
$arr[1] = 'yyy';
echo json_encode($arr);//["xxx","yyy"] 

$arr = [];
$arr[1] = 'yyy';
$arr[0] = 'xxx';
echo json_encode($arr);//{"1":"yyy","0":"xxx"}

代入の添字は同じですが、実行順序が変更され、結果も異なることがわかります

次のは友人が提案した解決策です

$arr = [];
$arr[1] = 'yyy';
$arr[0] = 'xxx';
$arr = array_values($arr);
echo json_encode($arr);//["yyy","xxx"]

結果に問題があることがわかります。yyy の元のインデックスは 1 で、結果は 0
必要な結果は次のとおりです["xxx", "yyy"]

これが解決策です

$arr = [];
$arr[1] = 'yyy';
$arr[0] = 'xxx';
ksort($arr);
echo json_encode($arr);//["xxx","yyy"]

ケース 3:

$arr = [];
$arr[0] = 'yyy';
$arr[2] = 'xxx';
print_r($arr);
echo json_encode($arr);
/*Array
(
    [0] => yyy
    [2] => xxx
)
{"0":"yyy","2":"xxx"}
*/

ケース 4 :

$arr = [];
echo json_encode($arr);//[]

概要:

配列を json に変換するとき、インデックスが 0 から始まる 0、1、2、... でない場合、順序、返される JSON 構造はオブジェクトです。配列を返したい場合は、インデックスが 0 から始まることが厳密に要求され、順序の途中に切れ目の数字があってはなりません

以上が配列をjsonに変換した結果は配列ですか、それともオブジェクトですか? (旅行記)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。