在数组中以正确的方式解析json

时间:2016-05-19 14:23:00

标签: php arrays json multidimensional-array

我有这个数组:

array(2) {
  [0]=>
  array(2) {
    ["hour"]=>
    string(2) "11"
    ["second_param"]=>
    string(434) "[{"x":735.6979166666666,"y":96.0},{"x":1733.0,"y":1.0},{"x":1772.0,"y":3.0},{"x":1848.0,"y":1.0},{"x":1863.0,"y":1.0},{"x":1874.0,"y":2.0},{"x":1929.0,"y":1.0},{"x":1954.0,"y":2.0},{"x":1963.0,"y":1.0},{"x":1976.0,"y":1.0},{"x":1990.0,"y":1.0},{"x":2000.0,"y":15.0},{"x":2800.0,"y":1.0},{"x":2897.0,"y":1.0},{"x":2993.0,"y":1.0},{"x":3037.0,"y":1.0},{"x":3069.0,"y":1.0},{"x":3082.0,"y":1.0},{"x":4532.0,"y":1.0},{"x":4909.0,"y":1.0}]"
  }
  [1]=>
  array(2) {
    ["hour"]=>
    string(2) "16"
    ["second_param"]=>
    string(494) "[{"x":735.5625000000001,"y":16.0},{"x":831.0,"y":1.0},{"x":1029.0,"y":11.0},{"x":1181.0,"y":2.0},{"x":1345.0,"y":1.0},{"x":1609.0,"y":15.0},{"x":1708.0,"y":1.0},{"x":1772.0,"y":1.0},{"x":1841.666666666667,"y":6.0},{"x":1888.6666666666665,"y":3.0},{"x":1941.4999999999998,"y":10.0},{"x":1997.909090909091,"y":33.0},{"x":2030.0,"y":1.0},{"x":2272.0,"y":4.0},{"x":2816.0,"y":2.0},{"x":2954.3333333333335,"y":3.0},{"x":3022.0,"y":2.0},{"x":3170.0,"y":1.0},{"x":4090.0,"y":2.0},{"x":4545.0,"y":5.0}]"
  }

on" second_param"我有json。我想解析那个json 我试过json_decode

但是我需要重新组织我的数组:

    array(68) {
  [0]=>
  array(3) {
    ["hour"]=>
    string(7) "11"
    ["x"]=>
    fload "2016-02-19"
    ["y"]=>
    float(16.939582156973)
  }
  [1]=>
  array(3) {
    ["hour"]=>
    string(7) "11"
    ["x"]=>
    fload "735.6979166666666"
    ["y"]=>
    float(96.0)
  }
  [2]=>
  array(3) {
    ["hour"]=>
    string(7) "11"
    ["x"]=>
    fload "1733.0"
    ["y"]=>
    float(1.0)
  }
  [3]=>
  array(3) {
    ["hour"]=>
    string(7) "11"
    ["x"]=>
    fload "1772.0"
    ["y"]=>
    float(3.0)
  }
  [4]=>
  array(3) {
    ["hour"]=>
    string(7) "11"
    ["x"]=>
    fload "1848.0"
    ["y"]=>
    float(1.0)
  }
......
  [5]=>
  array(3) {
    ["hour"]=>
    string(7) "16"
    ["x"]=>
    fload "735.5625000000001"
    ["y"]=>
    float(16.0)
  }
  [6]=>
  array(3) {
    ["hour"]=>
    string(7) "16"
    ["x"]=>
    fload "831.0"
    ["y"]=>
    float(1.0)
  }
  [7]=>
  array(3) {
    ["hour"]=>
    string(7) "16"
    ["x"]=>
    fload "1029.0"
    ["y"]=>
    float(11.0)
  }
  [8]=>
  array(3) {
    ["hour"]=>
    string(7) "16"
    ["x"]=>
    fload "1181.0"
    ["y"]=>
    float(2.0)
  }

等等。

所以"小时"应重复多次" x"出现

一些想法?

由于

2 个答案:

答案 0 :(得分:1)

这只是循环外部数组的情况,然后对于每个json字符串,解码它(它的一个对象数组),并为每个出现或你的坐标添加到进程构建的新数组< / p>

$arr = array( array("hour" => "11",
                    "second_param" => '[{"x":735.6979166666666,"y":96.0},{"x":1733.0,"y":1.0},{"x":1772.0,"y":3.0},{"x":1848.0,"y":1.0},{"x":1863.0,"y":1.0},{"x":1874.0,"y":2.0},{"x":1929.0,"y":1.0},{"x":1954.0,"y":2.0},{"x":1963.0,"y":1.0},{"x":1976.0,"y":1.0},{"x":1990.0,"y":1.0},{"x":2000.0,"y":15.0},{"x":2800.0,"y":1.0},{"x":2897.0,"y":1.0},{"x":2993.0,"y":1.0},{"x":3037.0,"y":1.0},{"x":3069.0,"y":1.0},{"x":3082.0,"y":1.0},{"x":4532.0,"y":1.0},{"x":4909.0,"y":1.0}]'
            ),
             array( "hour" => "16",
                    "second_param" => '[{"x":735.5625000000001,"y":16.0},{"x":831.0,"y":1.0},{"x":1029.0,"y":11.0},{"x":1181.0,"y":2.0},{"x":1345.0,"y":1.0},{"x":1609.0,"y":15.0},{"x":1708.0,"y":1.0},{"x":1772.0,"y":1.0},{"x":1841.666666666667,"y":6.0},{"x":1888.6666666666665,"y":3.0},{"x":1941.4999999999998,"y":10.0},{"x":1997.909090909091,"y":33.0},{"x":2030.0,"y":1.0},{"x":2272.0,"y":4.0},{"x":2816.0,"y":2.0},{"x":2954.3333333333335,"y":3.0},{"x":3022.0,"y":2.0},{"x":3170.0,"y":1.0},{"x":4090.0,"y":2.0},{"x":4545.0,"y":5.0}]'
             )
      );

print_r($arr);

$newarr = array();

foreach ($arr as $a) {

    $j = json_decode($a['second_param']);
    foreach( $j as $coord ) {
        $t = array();
        $t['hour'] = $a['hour'];
        $t['x'] = $coord->x;
        $t['y'] = $coord->y;

        $newarr[] = $t;
    }

}

print_r($newarr);

结果是

Array
(
[0] => Array
    (
        [hour] => 11
        [x] => 735.69791666667
        [y] => 96
    )

[1] => Array
    (
        [hour] => 11
        [x] => 1733
        [y] => 1
    )

[2] => Array
    (
        [hour] => 11
        [x] => 1772
        [y] => 3
    )

[3] => Array
    (
        [hour] => 11
        [x] => 1848
        [y] => 1
    )

[4] => Array
    (
        [hour] => 11
        [x] => 1863
        [y] => 1
    )

[5] => Array
    (
        [hour] => 11
        [x] => 1874
        [y] => 2
    )

[6] => Array
    (
        [hour] => 11
        [x] => 1929
        [y] => 1
    )

[7] => Array
    (
        [hour] => 11
        [x] => 1954
        [y] => 2
    )

[8] => Array
    (
        [hour] => 11
        [x] => 1963
        [y] => 1
    )

[9] => Array
    (
        [hour] => 11
        [x] => 1976
        [y] => 1
    )

[10] => Array
    (
        [hour] => 11
        [x] => 1990
        [y] => 1
    )

[11] => Array
    (
        [hour] => 11
        [x] => 2000
        [y] => 15
    )

[12] => Array
    (
        [hour] => 11
        [x] => 2800
        [y] => 1
    )

[13] => Array
    (
        [hour] => 11
        [x] => 2897
        [y] => 1
    )

[14] => Array
    (
        [hour] => 11
        [x] => 2993
        [y] => 1
    )

[15] => Array
    (
        [hour] => 11
        [x] => 3037
        [y] => 1
    )

[16] => Array
    (
        [hour] => 11
        [x] => 3069
        [y] => 1
    )

[17] => Array
    (
        [hour] => 11
        [x] => 3082
        [y] => 1
    )

[18] => Array
    (
        [hour] => 11
        [x] => 4532
        [y] => 1
    )

[19] => Array
    (
        [hour] => 11
        [x] => 4909
        [y] => 1
    )

[20] => Array
    (
        [hour] => 16
        [x] => 735.5625
        [y] => 16
    )

[21] => Array
    (
        [hour] => 16
        [x] => 831
        [y] => 1
    )

[22] => Array
    (
        [hour] => 16
        [x] => 1029
        [y] => 11
    )

[23] => Array
    (
        [hour] => 16
        [x] => 1181
        [y] => 2
    )

[24] => Array
    (
        [hour] => 16
        [x] => 1345
        [y] => 1
    )

[25] => Array
    (
        [hour] => 16
        [x] => 1609
        [y] => 15
    )

[26] => Array
    (
        [hour] => 16
        [x] => 1708
        [y] => 1
    )

[27] => Array
    (
        [hour] => 16
        [x] => 1772
        [y] => 1
    )

[28] => Array
    (
        [hour] => 16
        [x] => 1841.6666666667
        [y] => 6
    )

[29] => Array
    (
        [hour] => 16
        [x] => 1888.6666666667
        [y] => 3
    )

[30] => Array
    (
        [hour] => 16
        [x] => 1941.5
        [y] => 10
    )

[31] => Array
    (
        [hour] => 16
        [x] => 1997.9090909091
        [y] => 33
    )

[32] => Array
    (
        [hour] => 16
        [x] => 2030
        [y] => 1
    )

[33] => Array
    (
        [hour] => 16
        [x] => 2272
        [y] => 4
    )

[34] => Array
    (
        [hour] => 16
        [x] => 2816
        [y] => 2
    )

[35] => Array
    (
        [hour] => 16
        [x] => 2954.3333333333
        [y] => 3
    )

[36] => Array
    (
        [hour] => 16
        [x] => 3022
        [y] => 2
    )

[37] => Array
    (
        [hour] => 16
        [x] => 3170
        [y] => 1
    )

[38] => Array
    (
        [hour] => 16
        [x] => 4090
        [y] => 2
    )

[39] => Array
    (
        [hour] => 16
        [x] => 4545
        [y] => 5
    )

答案 1 :(得分:0)

循环到数组,解码json并在元素中添加 hour

$data = array(
    0 => array(
        "hour" => "11",
        "second_param" => '[{"x":735.6979166666666,"y":96.0},{"x":1733.0,"y":1.0},{"x":1772.0,"y":3.0},{"x":1848.0,"y":1.0},{"x":1863.0,"y":1.0},{"x":1874.0,"y":2.0},{"x":1929.0,"y":1.0},{"x":1954.0,"y":2.0},{"x":1963.0,"y":1.0},{"x":1976.0,"y":1.0},{"x":1990.0,"y":1.0},{"x":2000.0,"y":15.0},{"x":2800.0,"y":1.0},{"x":2897.0,"y":1.0},{"x":2993.0,"y":1.0},{"x":3037.0,"y":1.0},{"x":3069.0,"y":1.0},{"x":3082.0,"y":1.0},{"x":4532.0,"y":1.0},{"x":4909.0,"y":1.0}]'
    ),
    1 => array(
        "hour" => "16",
        "second_param" => '[{"x":735.5625000000001,"y":16.0},{"x":831.0,"y":1.0},{"x":1029.0,"y":11.0},{"x":1181.0,"y":2.0},{"x":1345.0,"y":1.0},{"x":1609.0,"y":15.0},{"x":1708.0,"y":1.0},{"x":1772.0,"y":1.0},{"x":1841.666666666667,"y":6.0},{"x":1888.6666666666665,"y":3.0},{"x":1941.4999999999998,"y":10.0},{"x":1997.909090909091,"y":33.0},{"x":2030.0,"y":1.0},{"x":2272.0,"y":4.0},{"x":2816.0,"y":2.0},{"x":2954.3333333333335,"y":3.0},{"x":3022.0,"y":2.0},{"x":3170.0,"y":1.0},{"x":4090.0,"y":2.0},{"x":4545.0,"y":5.0}]'
    )
);

foreach ($data as $k => $item) {
    $arr = json_decode($item['second_param'], true);
    foreach ($arr as $key => $value) {
        $arr[$key]['hour'] = 11;
    }
    $data[$k] = json_encode($arr);
}

var_dump($data);

如果需要,最后将其编码回来。