是否可以使用json_encode检测密钥类型?

时间:2013-04-17 22:51:28

标签: php json

相当难以解释,但是例如我有一个数组:

$lol = array(
    'key' => 'value',
    'key_1' => 'value 1',
    'simple_value',
    '0' => 'lol',
    'key_array' => array(
        'key_in_second' => 'value_with_key_in_second',
        'value_in_second_array',
    )
);

json_encode之后会是

{"key":"value","key_1":"value 1","0":"lol","key_array":{"key_in_second":"value_with_key_in_second","0":"value_in_second_array"}}

那么有可能以某种方式检测php数组中是否有密钥或注释?在我的示例中,元素'simple_value', '0' => 'lol'具有相同的键。

2 个答案:

答案 0 :(得分:2)

PHP并不关心数字0是否在引号中。它将它存储为数字0,与'value_in_second_array'相同将为0,因为它是没有键的第一个元素。

基本上,

array('0'=>'lol')array(0=>'lol')相同,array('lol')也一样;

你会看到simple_value消失了,因为它被lol覆盖。

答案 1 :(得分:2)

JSON准确地反映了php。例如,如果您有此代码:

<?php
$lol = array(
    'key' => 'value',
    'key_1' => 'value 1',
    'simple_value',
    '0' => 'lol',
    'key_array' => array(
        'key_in_second' => 'value_with_key_in_second',
        'value_in_second_array',
    )
);

print_r($lol);

输出结果为:

Array
(
    [key] => value
    [key_1] => value 1
    [0] => lol
    [key_array] => Array
        (
            [key_in_second] => value_with_key_in_second
            [0] => value_in_second_array
        )

)

这里发生的事情是,由于simple_value没有密钥,因此为其分配了一个0的密钥,但随后被lol覆盖了。您还可以查看value_in_second_array如何自动分配0键。

所以,与json_encode无关,你只是从来没有PHP中的数据。