2010-01-22 88 views
1

使用CakePHP(在PHP 5.2.6),我做一个表上的列表查询返回的数组,如:如何编码为JSON编码数组从非连续阵列

阵列 (

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

因为它不是一个顺序数组,json_encode()将它编码为一个对象,而不是我需要填充可Jeditable Select的JSON数组。

PHP 5.2.6不支持任何附加参数,所以我不能强制它创建一个JSON编码数组。

我的问题,有谁知道我怎么能以一种干净的方式解决这个问题?

回答

5

看到http://docs.php.net/array_values

array_values()返回从输入阵列和索引数字阵列的所有的值。

例如

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

打印

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

编辑:JavaScript数组不能有缝隙。您必须填写缺失的元素,例如空值。

$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); 

打印["None",null,null,"Value 1",null,"Value 2"]

+0

谢谢你这么多的广泛的答案,但是我必须保留指数,我忘了补充部分。 因此,如果用户选择某个数值(ID)发布并显示Value1和Value2。我很抱歉没有真正清楚! – JanWillem 2010-01-22 17:38:20

+0

你也可以用js对象来做到这一点。你需要另一个原因你需要一个数组吗? – VolkerK 2010-01-22 18:35:37

+0

谢谢VolkerK,这节省了我的一天,我没有用空值填充它,但是使用了排序,并且它做了窍门;) – JanWillem 2010-01-24 20:39:41

2

如果您想保留索引,你需要使用一个对象。如果不是,则通过array_merge传递它以重新索引数组。

www.php.net/array_merge

+0

谢谢你的回答,但是我需要它是一个数组,并且需要保存索引... – JanWillem 2010-01-22 17:51:55

+1

JSON *中的对象是一个非顺序键的数组。来自json.org: *名称/值对的集合。在各种语言中,这被实现为对象,记录,结构,字典,散列表,键控列表或关联数组。 *有序的值列表。在大多数语言中,这是作为数组,矢量,列表或序列实现的。 – voidstate 2010-01-22 22:17:28