强制PHP json_encode()将索引编码为字符串
我的阵列设置如下所示:强制PHP json_encode()将索引编码为字符串,php,json,Php,Json,我的阵列设置如下所示: $myArray = array(); $myArray[] = "New array item 1"; $myArray[] = "New array item 2"; $myArray[] = "New array item 3"; 在其上运行json_encode()时,它会输出以下内容: ["New array item 1","New array item 2","New array item 3"] 我希望函数将索引编码为字符串: {"0":"New ar
$myArray = array();
$myArray[] = "New array item 1";
$myArray[] = "New array item 2";
$myArray[] = "New array item 3";
在其上运行json_encode()时,它会输出以下内容:
["New array item 1","New array item 2","New array item 3"]
我希望函数将索引编码为字符串:
{"0":"New array item 1","1":"New array item 2","2":"New array item 3"}
因此,稍后我可以删除第一项,而不影响第二项的索引
有没有一种简单的方法可以做到这一点?使用
JSON\u FORCE\u OBJECT
:
json_encode( $data, JSON_FORCE_OBJECT );
需要的PHP 5.3+并非您想要的,但您可以使用
JSON\u FORCE\u OBJECT
选项:
json_encode($myArray, JSON_FORCE_OBJECT);
这将产生:
{"0":"New array item 1","1":"New array item 2","2":"New array item 3"}
如果将数组强制转换为对象,则相同:
json_encode((object)$myArray);
或者:
$myArray = array(
"0" => "New array item 1",
"2" => "New array item 2",
"3" => "New array item 3"
);
echo json_encode($myArray);
将给出同样的结果:
{"0":"New array item 1","2":"New array item 2","3":"New array item 3"}
对于PHP<5.3,请使用以下方法:
<?php
$myArray = array();
$myArray[] = "New array item 1";
$myArray[] = "New array item 2";
$myArray[] = "New array item 3";
echo json_encode((object)$myArray); // typecast the array as object
?>
没有其他办法了吗?我想把它当作一个数组。@bbeckford你什么意思?你仍然拥有原始数组,它没有变异或移除。例如,我不能这样做,是吗$decodedArray=json_decode(“{”0:“新数组项1”,“1:“新数组项2”,“2:“新数组项3”}”)$decodedArray[]=“新阵列项目4”;json_encode($decodedArray,json_FORCE_OBJECT)@bbeckford如果您计划在JavaScript中使用这个数组,最好知道语法无论如何都不允许使用具有此类索引的数组。您将获得一个SyntaxError:Unexpected标记:
@bbeckford您应该将true
作为第二个参数传递给json\u decode
这仅在索引不连续时有效。“对数组进行编码时,如果键不是从0开始的连续数字序列,则所有键都被编码为字符串,并为每个键值对显式指定。”@morgar:请再次阅读手册。它适用于所有情况,因为这是JSON\u FORCE\u OBJECT
的目标。5.3发布日期是2009年6月30日,那么这是什么理由呢?