Sunday, July 8, 2018

php - 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?


Answer



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



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


e.g.



$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 e.g. 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"]


No comments:

Post a Comment

plot explanation - Why did Peaches' mom hang on the tree? - Movies & TV

In the middle of the movie Ice Age: Continental Drift Peaches' mom asked Peaches to go to sleep. Then, she hung on the tree. This parti...