【问题标题】:How to encode to JSON encoded array from non sequential array如何从非顺序数组编码为 JSON 编码数组
【发布时间】:2010-01-22 15:37:15
【问题描述】:

使用 CakePHP(在 PHP 5.2.6 上)我对一个返回数组的表进行列表查询:

数组 (

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

)

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

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

我的问题,有谁知道我可以如何以干净的方式解决这个问题?

【问题讨论】:

    标签: php json


    【解决方案1】:

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

    【讨论】:

    • 非常感谢您的广泛回答,但是我必须保留索引,我忘了添加那部分。因此,如果用户选择了某些内容,则会发布数值 (ID),并显示 Value1 和 Value2。我很抱歉没有说清楚!
    • 你也可以使用 js 对象来做到这一点。您需要数组还有其他原因吗?
    • 感谢 VolkerK,这节省了我的时间,我没有用空值填充它,而是玩了排序,它成功了 ;)
    【解决方案2】:

    如果要保留索引,则需要使用对象。如果没有,则将其传递给 array_merge 以重新索引数组。

    www.php.net/array_merge

    【讨论】:

    • 感谢您的回答,不过我需要它是一个数组,并且需要保留索引...
    • JSON 中的对象 一个具有非顺序键的数组。来自 json.org:* 名称/值对的集合。在各种语言中,这被实现为对象、记录、结构、字典、哈希表、键控列表或关联数组。 * 一个有序的值列表。在大多数语言中,这被实现为数组、向量、列表或序列。
    猜你喜欢
    • 1970-01-01
    • 2020-07-14
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多