2013-04-17 27 views
2

相当难以解释,但例如我有一个数组:是否有可能使用json_encode检测密钥类型?

$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'具有相同的键。

+0

检测类型。就像你所显示的数组一样,所有的东西都用引号包起来,所以PHP会把它读作字符串,从而以字符串的形式传递给json。 –

+0

@DarylGill你不明白,我需要知道'php'中的数组是否有键。 – user1692333

回答

2

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

基本上,

array('0'=>'lol')相同array(0=>'lol')是相同的被array('lol');

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

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中的数据。

相关问题