用户
 找回密码
 入住 CI 中国社区
搜索
查看: 1685|回复: 7
收起左侧

[讨论/交流] 很诡异呀,相同类型的数组编码后却是不同类型的json

[复制链接]
发表于 2013-7-3 15:45:10 | 显示全部楼层 |阅读模式
PHP复制代码
 
$a = array (  0 =>   array (    'name' => 0,    'value' => 0.62,  ),  1 =>   array (    'name' => 1,    'value' => 1.23,  ),  2 =>   array (    'name' => 2,    'value' => 0.35,  ),  3 =>   array (    'name' => 3,    'value' => 0.8,  ),  4 =>   array (    'name' => 4,    'value' => 0.35,  ),  5 =>   array (    'name' => 5,    'value' => 1.37,  ));$b = array (  0 =>
  array (
    'name' => 0,
    'value' => 1.15,
  ),
  1 =>
  array (
    'name' => 1,
    'value' => 1.16,
  ),
  2 =>
  array (
    'name' => 2,
    'value' => 1.03,
  ),
  3 =>
  array (
    'name' => 3,
    'value' => 1.72,
  ),
  4 =>
  array (
    'name' => 4,
    'value' => 1.31,
  ),
  6 =>
  array (
    'name' => 6,
    'value' => 0.93,
  ));
 
echo json_encode($a);
echo '<br><br>';
echo json_encode($b);
明显发现两个json有很大的不同,知道原因的还请说一下.
 
复制代码

 楼主| 发表于 2013-7-3 15:46:28 | 显示全部楼层
百撕不得骑姐
发表于 2013-7-3 16:07:57 | 显示全部楼层
序号问题,数组B你的下标把6改成5就可以了
 楼主| 发表于 2013-7-3 16:08:08 | 显示全部楼层
第二个数组比第一个数组少了一个索引5,所以编码后的json不同,可以用array_value重新排列一下,这样生成的json就是一样的了.谢谢罪恶和seven的提醒和帮助.可以结贴了.
发表于 2013-7-3 16:17:10 | 显示全部楼层
一个是作为array输出一个是作为object输出的区别罢了 php.net有例子解释的
发表于 2013-7-3 17:12:50 | 显示全部楼层
与下标有关,以下是我总结出来的:


// json_encode() JSON 输出规律: 从0开始的‘顺序’数字key结果前台解析为数组;从0开始不连续数字key或从非零开始的无论连续数字key或者字符key则前台解析为标准对象
$t = array(
         1 => array('name'=>'bb'),
         2 => array('name'=> 'bc')
);
echo json_encode($t);        // 输出 {"1":{"name":"bb"},"2":{"name":"bc"}}

$t = array(
         0 => array('name'=>'bb'),
         2 => array('name'=> 'bc')
);
echo json_encode($t); // {"0":{"name":"bb"},"2":{"name":"bc"}}

$t = array(
         0 => array('name'=>'bb'),
         1 => array('name'=> 'bc')
);
echo json_encode($t); // [{"name":"bb"},{"name":"bc"}]

$t = array(
         '0' => array('name'=>'bb'),
         '1' => array('name'=> 'bc')
);
echo json_encode($t);        // [{"name":"bb"},{"name":"bc"}]

$t = array(
         'A' => array('name'=>'bb'),
         'b' => array('name'=> 'bc')
);
echo json_encode($t);         // {"A":{"name":"bb"},"b":{"name":"bc"}}

发表于 2013-7-4 10:36:14 | 显示全部楼层
上面的各位大神是正确的哦
 楼主| 发表于 2013-7-11 16:16:13 | 显示全部楼层
mark35 发表于 2013-7-3 17:12
与下标有关,以下是我总结出来的:

谢谢了

本版积分规则