学习笔记

Study notes

PHP数组转JS数组,JS如何接收PHP数组--Json

云逐梦22082019-08-23 01:14:00返回列表

PHP的数组在转JSON的时候,如果索引连续,则转成数组。如果索引不连续,则会转成对象!

PHP的数组在转JSON的时候,如果索引连续,则转成数组。如果索引不连续,则会转成对象!


在PHP中有以下数组:

Array(
    [0] => Array
        (
            [id] => 0
            [name] => name1
         )

    [2] => Array
        (
            [id] => 2
            [name] => name2
        )
)

想JSON将其编码为JSON数组,产生如下所示的字符串:

[  
    {  
        "id":0,
        "name":"name1"
    },
    {  
        "id":2,
        "name":"name2"
    }
]

但是当调用json_encode给这个数组时,得到以下内容:

{  
    "0":{  
        "id":0,
        "name":"name1"
    },
    "2":{  
        "id":2,
        "name":"name2"
    }
 }

这是一个对象而不是一个数组。

这种行为,是因为你的数组不是顺序的 - 它有键02,但没有1作为键。

只有数字索引是不够的。

json_encode将编码你的PHP数组作为JSON数组(如果你的PHP数组是连续的 - 也就是说,如果它的键是0,1,2,3 ...)

你可以使用该array_values函数按顺序重新索引你的数组,以获得所需的行为。例如,下面的代码在你的用例中成功运行:

echo json_encode(array_values($input));

另一种方法:

foreach ($arr as $value) {
  $json .= json_encode($value) . ',';
} 
echo '[' . substr($json,0,strlen($json) - 1) . ']';

json_encode()是将$arr的每一个值进行json编码,然后我们想输出一个json的数组,所以我们将每个编译后的值后面加一个逗号并且最后在所有值外面加上'[]',这是json数组的格式,注意因为我们在将每一个值进行json编码后都加上一个逗号在后面,这样就导致最后所有值合并数组时多一个逗号,所有我们得用substr()函数将其最后一个逗号去掉!

PHP中将数组转变成Json

强大的PHP已经提供了内置函数:json_encode() 和 json_decode()。很容易理解,json_encode()就是将PHP数组转换成Json。相反,json_decode()就是将Json转换成PHP数组。


$array = array("name" => "a","age" => 20); 
echo json_encode($array);

程序将打印出 :{"name":"a","age":20}

$array = array(0 => "a", 1 => 20); 
echo json_encode($array);

程序将打印出 :["a",20]


以上两个例子可以看出,如果PHP数组的键都是数字,那么json_encode()返回一个数组形式的Json,如果PHP数组的键全是字符串。那么json_encode()就会返回一个对象形式的Json。两者在js中的调用是不同的。

事实上,只要在PHP数组的键中有一个字符串形式的键,那么json_encode()就会返回对象形式的Json。这是不正确的。因为,虽然在PHP代码中不会出现错误,但要是将这样的Json传给JS函数,JS会将此Json当做一个对象,而对象是不可能以数字作为属性名的。也就是说JS 不知道这是什么 : user.0.username  (中间是数字零)




返回
顶部