我今天在我的生产代码中发现json_encode
的奇怪结果,有时会返回一个数组,如["perl","php","python"]
,但有时会返回一个对象,如{"0":"perl","2":"python"}
。这是一个最小的例子:
$a = array("perl", "php", "python", "something other");
foreach($a as $index => $item)
{
if ($item == "something")
unset($a[$index]);
}
echo json_encode($a);
为什么会这样?
答案 0 :(得分:2)
在foreach
循环中,一旦$item == "something"
为真,数组键不会连续数字索引(除了最后一次迭代),然后json_encode
返回一个对象。如果数组中的所有值都不等于“something”,则返回一个数组。由于数组总是我想要的,我在array_values()
之前使用json_encode
。