Как создать вложенный массив PHP - PullRequest
0 голосов
/ 15 марта 2020

Мой набор данных: enter image description here

Я хочу организовать в следующем json формате:

data: {
    'year' : 2014,
    'year_data' : {
        'month' : 'January',
        'month_data' : {
            'day' : {
                '1' : 100,
                '2' : 200,
                '3' : 300,
                '4' : 400,
            }
        }
    }
}

Вот мой подход:

function sheetData($data, $sheet) {
    echo "<pre>";
    $years = ['2014', '2015', '2016', '2017', '2018'];
    $months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 
    'August', 'September', 'October', 'November', 'December'];

    $x = 1; 
    $segment = 0;
    $segment_end = 11;
    $year_count = 0;
    $calc_years = [];
    $calc_months = [];
    while($x <= $sheet['numRows']) {
        $y = 3;
        if ($segment == $segment_end) { 
            $calc_months[$segment] = $months[$segment];
            $segment = 0;
            $calc_years[$year_count] = $years[$year_count];
            $year_count++;
        } else { 
            $calc_months[$segment] = $months[$segment];
            $segment++;
        }
        $col = 0;
        while($y <= $sheet['numCols']) {
            $cell = isset($sheet['cells'][$x][$y]) ? $sheet['cells'][$x][$y] : '';
            $calc_days[$col] =  $cell;
            $y++;
            $col++;
        }  
        $x++;
    }

    $data_year = array();
    $data_month = array();
    $data_day = array();
    $data_array = array();
    $count = 0;

    $count_years = count($calc_years);
    $count_months = count($calc_months);
    $count_days = count($calc_days);

    for ($p=0; $p < $count_years ; $p++) { 
      $data_array[$p]['year'] = $calc_years[$p];
      for ($q=0; $q < $count_months; $q++) {
        $data_array[$p]['year_data'][$q]['month'] = $calc_months[$q];
        for ($r=0; $r < $count_days; $r++) {
          $data_array[$p]['year_data'][$q]['month']['day'][$r] = $calc_days[$r];
        }
      }

    }

    var_dump($data_array);
}

Я прочитал данные из таблицы и сегментировал их по годам, месяцам и дням в отдельных массивах и, наконец, попытался написать массив для заполнения нужного мне формата. Но я изо всех сил пытаюсь создать из этого вложенный массив. Пробовал несколькими способами, но без решения. Любая помощь?

Полный код ссылки: введите описание ссылки здесь

Пример: https://drive.google.com/open?id=1NDpd0-sEMn47JDfhMagAjRnr_MemZttA

1 Ответ

0 голосов
/ 15 марта 2020

Я считаю, что проще всего использовать обозначение массива в квадратных скобках в PHP:

$array = [
  "data" => [
    "year" => 2014,
    "year_data" => [
      "month" => "January",
      "month_data" => [
        "day" => [
          "1" => 100,
          "2" => 200,
          "3" => 300,
          "4" => 400
        ]
      ]
    ]
  ]
];

Затем вы можете преобразовать этот массив в строку JSON, например:

json_encode($array);
...