使用json_encode()将PHP数组转换为JSON数组

我已经使用内置的json_encode();编码了一个数组json_encode(); function。 我需要它的arraysarrays的格式如下所示:

 [["Afghanistan",32,12],["Albania",32,12]] 

但是,它返回为:

 ["2":["Afghanistan",32,12],"4":["Albania",32,12]] 

我如何删除这些行号,而不使用任何正则expression式的欺骗?

如果您的PHP数组中的数组键不是连续的数字,那么json_encode() 必须使另一个构造一个对象,因为JavaScript数组总是连续按数字索引。 在PHP的外部结构上使用array_values()来放弃原始数组键,并用基于零的连续编号replace它们:

例:

 // Non-consecutive number keys are OK for PHP // but not for a JavaScript array $array = array( 2 => array("Afghanistan",32,13), 4 => array("Albania",32,12) ); // array_values() removes the original keys and replaces // with plain consecutive numbers $out = array_values($array); json_encode($out); // [["Afghanistan",32,13],["Albania",32,12]] 

我想添加到Michael Berkowski的回答中,如果数组的顺序颠倒过来,也可能发生这种情况,在这种情况下观察问题有点麻烦,因为在json对象中,顺序将按顺序升序排列。

例如:

 [ 3 => 'a', 2 => 'b', 1 => 'c', 0 => 'd' ] 

将返回:

 { 0: 'd', 1: 'c', 2: 'b', 3: 'a' } 

所以在这种情况下,解决scheme是在使用array_reverse编码到json之前

如果你没有在你的初始数组上指定索引,你会得到正常的数字。 数组必须具有某种forms的唯一索引