开发者

How to encode to JSON encoded array from non sequential array

开发者 https://www.devze.com 2022-12-17 15:38 出处:网络
Using CakePHP (On PHP 5.2.6) I do a list query on a table which returns an array like: Array ( [0] => None

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 arr开发者_JS百科ay 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.

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"]


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

0

精彩评论

暂无评论...
验证码 换一张
取 消