使用json_encode将数组更改为json

时间:2014-03-06 14:47:49

标签: php json

我有这个数组:

Array
(
    [1] => 20130701 4 4 3060 1
    [2] => 20130702 270 757 13812810 4
    [3] => 20130703 5 123 3894971 2
    [4] => 20130704 290 478 5119617 1
    [5] => 20130705 88 98 189791 2
    [6] => 20130708 9 73 564627 1
    [7] => 20130722 6102 11992 41974701 1
    [8] => 20130723 6397 11021 40522224 1
    [9] => 20130725 4644 9336 49167728 2
    [10] => 20130726 4891 10157 33516844 3
    [11] => 20130727 123 319 2538226 3
    [12] => 20130728 451 801 1078705 2
    [13] => 20130729 13609 30407 95551827 5
    [14] => 20130730 6354 17550 272794650 158
    [15] => 20130731 6270 18456 269468599 174
)

我正在尝试更改输出以便在图表中显示,我是否将其更改为json:

foreach ($day as $key => $value) {
    $value = explode(" ", $value) ; 
    $day[$key] = $value ; 
    $charts[] = array(substr($value[0],0,4).'-'.substr($value[0],4,2).'-'.substr($value[0],6,2),$value[4]) ; 
}
$charts = json_encode($charts, JSON_NUMERIC_CHECK) ;

但它显示了我:

[["2013-07-01","1\r"],["2013-07-02","4\r"],["2013-07-03","2\r"],["2013-07-04","1\r"],["2013-07-05","2\r"],["2013-07-08","1\r"],["2013-07-22","1\r"],["2013-07-23","1\r"],["2013-07-25","2\r"],["2013-07-26","3\r"],["2013-07-27","3\r"],["2013-07-28","2\r"],["2013-07-29","5\r"],["2013-07-30","158\r"],["2013-07-31","174\r"]] 

为什么\r会显示?我能以任何方式阻止这种情况吗?

2 个答案:

答案 0 :(得分:1)

您的数组末尾有返回字符

[3] => 20130703 5 123 3894971 2\r

它们不可见,因为\n =新行\r返回指向行首的指针。

最好的办法是在每个元素上使用trim()

foreach ($day as $key => $value) {
    $value = explode(" ", trim($value)); 
    $day[$key] = trim($value) ; 
    $charts[] = array(trim(substr($value[0],0,4).'-'.substr($value[0],4,2).'-'.substr($value[0],6,2),$value[4])) ; 
}

使用intval()在数字上更好,它确保数据类型为整数并删除空格,返回......也是。

答案 1 :(得分:1)

$charts[] = array(substr($value[0],0,4).'-'.substr($value[0],4,2).'-'.substr($value[0],6,2),substr($value[4],0, -1)) ;