How to encode to JSON encoded array from non sequential array

Using CakePHP (On PHP 5.2.6) I do a list query on a table which returns an array like:

Array (

[0] => None
[3] => Value 1
[5] => Value 2

)

Since it's not a sequential array json_encode() encodes it to an object instead of a JSON array which I need for filling a Jeditable Select.

PHP 5.2.6 does not support any additional parameters, so I can't force it to create an JSON encoded array.

My question, does anyone know how I can solve this problem in a clean way?


see http://docs.php.net/array_values :

array_values() returns all the values from the input array and indexes numerically the array.

eg

$a = array(
  0 => 'None',
  3 => 'Value 1',
  5 => 'Value 2'
);
$x = array_values($a);
print_r($x);
echo json_encode($x);

prints

Array
(
    [0] => None
    [1] => Value 1
    [2] => Value 2
)
["None","Value 1","Value 2"]

edit: Javascript arrays can't have gaps. You'd have to fill the missing elements with eg NULL.

$a = array(
  0 => 'None',
  3 => 'Value 1',
  5 => 'Value 2'
);

$na = array_pad(array(), max(array_keys($a)), null);
$a += $na;
ksort($a);
echo json_encode($a);

prints ["None",null,null,"Value 1",null,"Value 2"]


If you want to preserve the indexes, you need to use an object. If not, pass it through array_merge to reindex the array.

www.php.net/array_merge

链接地址: http://www.djcxy.com/p/47792.html

上一篇: Python CJSON编码自定义对象

下一篇: 如何从非顺序数组编码为JSON编码数组