php json_encode() 函數格式化數據時會根據不同的數組類型格式化不同類型的json數據
索引數組時
<?php $arr = [1,2,3,4,5]; print_r(json_encode($arr)); //輸出 [1,2,3,4,5]
關聯數組時
<?php $arr = [ "name"=>"Bob", "job"=>"IT" ]; print_r(json_encode($arr)); //輸出 {"name":"Bob","job":"IT"}
空數組
<?php $arr = []; print_r(json_encode($arr)); //輸出 []
索引數組時生成的是數組類型數據,關聯數組時生成的是對象類型的數據,空數組返回的是數組類型。但是當碰到同一個字段返回的數組可能是關聯數組也可能是空數組時,就會在app端出現數據類型不一致的問題,解決方式有兩種:
一,使用 json_encode的 JSON_FORCE_OBJECT 模式
<?php $arr = []; print_r(json_encode($arr,JSON_FORCE_OBJECT)); //輸出 {}
但是這種存在一個問題,它會把所有的數據都以對象的方式返回,包括索引數組:
<?php $arr = [1,2,3,4,5,6]; print_r(json_encode($arr,JSON_FORCE_OBJECT)); //輸出 {"0":1,"1":2,"2":3,"3":4,"4":5,"5":6}
二,定義空數據時使用 ArrayObject 定義而不適用 Array() 或者 []
<?php $arr = new ArrayObject(); print_r(json_encode($arr)); //輸出 {}
到這里我們可以隨意的控制返回的json數據中數據的類型啦!!!!
