一、php 使用json_encode()转换值中大括号与花括号区别
当array是一个从0开始的连续数组时,json_encode出来的结果是一个由[]括起来的字符串
<?php $arrField = array( 'a', 'a', 'a', 'a', ); var_dump($arrField); echo json_encode($arrField); //输出内容 array 0 => string 'a' (length=1) 1 => string 'a' (length=1) 2 => string 'a' (length=1) 3 => string 'a' (length=1) ["a","a","a","a"]
当array是不从0开始或者不连续的数组时,json_encode出来的结果是一个由{}括起来的key-value模式的字符串
<?php $arrField = array( 1=>'a', 'a', 'a', 'a', ); var_dump($arrField); echo json_encode($arrField); //输出内容 array 1 => string 'a' (length=1) 2 => string 'a' (length=1) 3 => string 'a' (length=1) 4 => string 'a' (length=1) {"1":"a","2":"a","3":"a","4":"a"}
当我们需要他强制返回由[]括起来的字符串该怎么做呢?
非常简单,只要使用sort(),对数组排序,此函数为 array 中的元素赋与新的键名。这将删除原有的键名,而不是仅仅将键名重新排序。并将键值从高到低排序。
<?php $arrField = array( 'a', 'a', 4 =>'a', 'a', ); //var_dump($arrField); echo json_encode($arrField); sort($arrField); echo "<br>转换为[]包围的字符串<br>"; echo json_encode($arrField); //输出内容 {"0":"a","1":"a","4":"a","5":"a"} 转换为[]包围的字符串 ["a","a","a","a"]
二、关于json_decode() 函数
json_decode(string $json [, bool $assoc ])
$json:json格式字符串,
$assoc:返回格式,当为真返回数组而非对象
当字符串为[1,1,1] 这种模式时,json_decode默认解析出来的结果是一个数组,
当字符串为{"1":1,"2":1} 这种模式时,json_decode默认解析出来的结果是一个对象,此时可以设置它的第二个参数为true强制让它返回数组
由于php无法区分一维数组和二维数组,才会出现以上情况,因为使用json编码时推荐将第二个参数设置为true