使用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的唯一索引