Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用json_解码将数组字符串转换为PHP时遇到的问题_Php - Fatal编程技术网

使用json_解码将数组字符串转换为PHP时遇到的问题

使用json_解码将数组字符串转换为PHP时遇到的问题,php,Php,我正在测试json_decode函数,该函数将UTF-8字符串转换为php变量 我不明白为什么这不起作用 $names='array("Jack","Jill","John")' $convert_names=json_decode($names); echo echo $convert_names[0]; 但这是有效的 $names='["Jack","Jill","John"]' $convert_names=json_decode($names); echo echo $convert_

我正在测试json_decode函数,该函数将UTF-8字符串转换为php变量

我不明白为什么这不起作用

$names='array("Jack","Jill","John")'
$convert_names=json_decode($names);
echo echo $convert_names[0];
但这是有效的

$names='["Jack","Jill","John"]'
$convert_names=json_decode($names);
echo echo $convert_names[0];
我了解到创建PHP数组的方法是

$names=array("Jack","Jill","John") // this works
$names=["Jack","Jill","John") //this does not work
当涉及JSON_DECODE函数时,为什么会有如此大的不同呢?

数组(“Jack”、“Jill”、“John”)
是数组的PHP符号,但JSON无效。巧合的是,
[“Jack”、“Jill”、“John”]
在PHP和JSON中都有效

您不能使用来评估PHP语法;这就是该功能的用途:

eval('$names = array("Jack","Jill","John");');
echo $names[0]; // Jack

不过,如果可以的话,我会像避免瘟疫一样避免它——请参阅其文档中的注意事项。

JSON代表JavaScript对象表示法,而
array()
是PHP创建新数组的标准方法。没错,最近PHP也支持
[]
表示法,但是请检查一下,看看组成有效json的规则是什么


代码不起作用的另一个原因是
echo echo
“我正在测试将UTF-8字符串转换为php变量的json_解码函数”您的行
//这不起作用
有不匹配的括号类型
[…)
,因此它当然不起作用。我假设您的意思是
[…]
。在任何情况下,您试图在该行中使用的语法仅在PHP5.4及更高版本中可用,因此如果您使用的是5.3或更早版本,则不会起作用。
'array(“Jack”、“Jill”、“John”)
不是JSON。请参阅:
echo
??这并非巧合,
[]
是有效的PHP。引入短数组语法是因为JSON的流行……此外,您使用
eval
既有害又错误(
eval
应该包含一个返回语句),或者assignment@Elias请看一看文档,这不是必需的:“eval()除非在求值代码中调用return,否则返回NULL,在这种情况下,传递给return的值返回“是的,现在您对
eval
的使用将起作用,但最初,您的代码是
$convert\u names=eval($names)
,它会将null赋值给
$convert_names
,这是错误的。另外:使用
eval
,就像你在类/函数中所做的那样,会在全局命名空间中创建
$names
,而不是在正确的范围内,因此:它仍然是邪恶的,你不应该显示这样危险的示例代码!事实上,我确实编辑了-道歉老实说,我从未使用过eval,但我知道它的存在,所以我认为它值得作为一个例子提供——只要它有足够的警告。