0

我无法从以下 php 数组中获取正确的 json 格式

Array
(
    [0] => Array
        (
            [name] => name1
            [data] => Array
                (
                    [0] => Array
                        (
                            [5] => 2013-15-6,9
                            [6] => 2013-15-7,9
                            [7] => 2013-15-8,9
                            [8] => 2013-15-9,9
                            [9] => 2013-15-10,9
                            [10] => 2013-15-11,9
                            [11] => 2013-15-12,9
                        )

                )

        )

)

将其编码为 json 输出

[
    {
        "name": "name1",
        "data": [
            {
                "5": "2013-15-6,9",
                "6": "2013-15-7,9",
                "7": "2013-15-8,9",
                "8": "2013-15-9,9",
                "9": "2013-15-10,9",
                "10": "2013-15-11,9",
                "11": "2013-15-12,9"
            }
        ]
    }
]

我需要的 json 输出如下所示,基本上删除了数据数组中的大括号并删除了我认为不可能的索引号。

[
    {
        "name": "name1",
        "data": [
            "2013-15-11,9",
            "2013-15-12,9"
        ]
    }
]

我已经尝试了 array() 围绕变量的不同组合,通过在数据数组中添加括号让我足够接近,但我无法摆脱大括号。非常感谢一些帮助,已经为此工作了几个小时。谢谢

4

3 回答 3

1

我采用了您期望得到的 json 输出并json_decode对其进行了处理,结果如下:

Array
(
    [0] => stdClass Object
        (
           [name] => name1
           [data] => Array
                (
                    [0] => 2013-15-11,9
                    [1] => 2013-15-12,9
                )

        )

)

这就是您的 PHP 结构在发送到json_encode.

PS我检查了它json_encode(颠倒了过程),它返回了你需要的东西。

于 2013-08-28T10:31:42.417 回答
1

主要思想是,即使您没有直接放置索引,PHP 也会将它们从0. 即,仅当您的数组具有连续索引时,相应的 JSON 可能没有键,从0. 否则,必须放置索引- 这是因为生成的 JSON 必须同时包含键和值。

见样本:

$rgData = ['a','b','c'];
var_dump(json_encode($rgData));//string(13) "["a","b","c"]"
unset($rgData[0]);//now we're going from 1 numeric key
var_dump(json_encode($rgData));//string(17) "{"1":"b","2":"c"}" 

请注意,在第二种情况下,您有索引,从1- 开始,并且 JSON必须保存它。做到这一点的唯一方法是传递索引。

您可以通过以下方式将数组转换为连续键:

$rgData = [5=>'a',6=>'b',7=>'c'];
$rgData = array_values($rgData);
var_dump($rgData);//array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" } 
于 2013-08-28T10:33:09.430 回答
0

通过用 `[0]['data'][0]' 中的值的新索引数组覆盖[0]['data'],您可以在一行中重组数据。

代码:(演示

$array=[
            ['name'=>'name1',
             'data'=>[
                 [
                     5=>'2013-15-6,9',
                     6=>'2013-15-7,9',
                     7=>'2013-15-8,9',
                     8=>'2013-15-9,9',
                     9=>'2013-15-10,9',
                     10=>'2013-15-11,9',
                     11=>'2013-15-12,9'
                 ]
              ]
            ]
        ];
$array[0]['data']=array_values($array[0]['data'][0]);
echo json_encode($array);

输出:

[
    {
        "name":"name1",
        "data":[
            "2013-15-6,9",
            "2013-15-7,9",
            "2013-15-8,9",
            "2013-15-9,9",
            "2013-15-10,9",
            "2013-15-11,9",
            "2013-15-12,9"
        ]
    }
]
于 2017-12-04T21:25:56.127 回答