JSON は、その高性能な送信と分析により、データ送信に広く使用されています。この記事では主にphp json形式制御の詳細な分析に関する関連情報を紹介します。お役に立てれば幸いです。
json の問題に関して、初心者の友人が次々に私のところに来て、たとえば、なぜ {"1":"item1","2":"item2","3":"item3" を出力するのかと尋ねてきました。 ["item1","item2","item3"] の代わりに。
php配列とjs配列
ここではphp 5.4以降の構文を使用します。
php には連想配列とインデックス配列があります。例:
<?php // 索引数组 $arr = ['item1', 'item2', 'item3']; // 关联数组 $arr = [ 'name' => '张三', 'age' => '22', ];
そして、js にはインデックス配列しかありません。連想配列のシミュレートから K/V キーと値のペアを使用できます。
K/V キーと値のペアに似ていますが、配列の特性がないため、ここでは詳しく説明しません。
上記のphp配列をjson_encodingした後に得られるjson形式は、それぞれ ["item1", "item2", "item3"] と {"name":"u5f20u4e09","age":"22"} です。ここでの中国語は Unicode に変換されています。中国語を表示したい場合、PHP 5.4 は json_encode($arr, JSON_UNESCAPED_UNICODE) で {"name":"Zhang San","age":"22" } を取得できます。 , しかし、このように書くことはあまりお勧めできません。
ここで得られるのは、配列内の json 文字列と js 内のオブジェクト形式です。では、なぜこれら 2 つのタイプが生成されるのか、つまり、どのような状況でオブジェクト形式が生成され、どのような状況で配列が生成されるのかを示します。フォーマットが生成されます。
php配列出力形式制御
一般的な状況をリストしましたので、コードを見てください。
<?php $arr = [ // 不是 0 开始,会输出对象 1 => 'item1', 2 => 'item2', 3 => 'item3', ]; echo "输出对象: ", json_encode($arr), "\n"; // 输出对象: {"1":"item1","2":"item2","3":"item3"} $arr = [ // 连续索引,输出数组 0 => 'item1', 1 => 'item2', 2 => 'item3', ]; echo "输出数组: ", json_encode($arr), "\n"; // 输出数组: ["item1","item2","item3"] $arr = [ // 连续索引,输出数组 'item1', 'item2', 'item3', ]; echo "输出数组: ", json_encode($arr), "\n"; // 输出数组: ["item1","item2","item3"] $arr = [ // 索引不连续,输出对象 0 => 'item1', 1 => 'item2', 2 => 'item3', 5 => 'item5', ]; echo "输出对象: ", json_encode($arr), "\n"; // 输出对象: {"0":"item1","1":"item2","2":"item3","5":"item5"} $arr = [ // 包含关联索引,一定输出对象 0 => 'item1', 1 => 'item2', 2 => 'item3', 'other' => '其他字段' ]; echo "输出对象: ", json_encode($arr), "\n"; // 输出对象: {"0":"item1","1":"item2","2":"item3","other":"\u5176\u4ed6\u5b57\u6bb5"} // 关联数组 + 索引数组 实例 $arr = [ // 关联数组 'other' => '其他字段', 'count' => 3, // 数组个数 'list' => [ // 索引数组 'item1', 'item2', 'item3', ], ]; echo "对象+数组: ", json_encode($arr), "\n"; // 对象+数组: {"other":"\u5176\u4ed6\u5b57\u6bb5","count":3,"list":["item1","item2","item3"]}
実際、最初のタイプは、多くの初心者の友人がよく遭遇する問題です。
データベースが読み出された後、ID をインデックスとして使用したいため、データベースの ID は 0 から始まりません。この例を見てください。
$arr = $User->where($where)->find(); // 读取数据 $list = []; foreach($arr as $key => $val) { // 遍历数组 $list[$key] = [ 'name' => $val['name'], 'age' => $val['age'], ]; } $list['count'] = count($arr); // 其他属性 echo json_encode($list); // 输出 json // {"1":{"name":"zhangsan","age":22},"2":{"name":"lisi","age":25},"count":2}
最後の方法は、カスタム フィールドと配列を組み合わせて使用して、先ほどの例を変更する方法です。
$arr = $User->where($where)->find(); // 读取数据 $list = []; foreach($arr as $key => $val) { // 遍历数组 $list['list'][] = [ // 修改这里 'name' => $val['name'], 'age' => $val['age'], ]; } $list['count'] = count($arr); // 其他属性 echo json_encode($list); // 输出 json // {"list":[{"name":"zhangsan","age":22},{"name":"lisi","age":25}],"count":2}
関連する推奨事項:
以上がphpでのjson形式制御の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。