PHP обработка вложенного массива для создания ключей даты и значений - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть проект PHP, в котором я управляю структурами данных (в переменной $data), определенными так:

array:35 [▼
  "2020-03-16" => array:12 [▼
    "00:00:00" => 17.185
    "02:00:00" => 17.235
    "04:00:00" => 17.25
    "06:00:00" => 16.905
    "08:00:00" => 21.205
    "10:00:00" => 23.47
    "12:00:00" => 24.42
    "14:00:00" => 27.245
    "16:00:00" => 30.94
    "18:00:00" => 30.78
    "20:00:00" => 29.735
    "22:00:00" => 28.64
  ]
  "2020-03-17" => array:12 [▼
    "00:00:00" => 29.985
    "02:00:00" => 32.455
    "04:00:00" => 31.28
    "06:00:00" => 34.33
    "08:00:00" => 29.755
    "10:00:00" => 26.92
    "12:00:00" => 29.72
    "14:00:00" => 28.36
    "16:00:00" => 30.815
    "18:00:00" => 34.605
    "20:00:00" => 34.315
    "22:00:00" => 33.125
  ]
  "2020-03-18" => array:12 [▶]
...
]

Они поступают из внешней службы, поэтому я не могу изменить их в происхождение. Мне нужно «переписать» $data, чтобы у меня наконец-то появилось что-то вроде:

array:420 [▼
"2020-03-16 00:00:00" => 17.185
"2020-03-16 02:00:00" => 17.235
"2020-03-16 04:00:00" => 17.25
...
"2020-03-20 00:00:00" => 22.675
"2020-03-20 02:00:00" => 24.67
...
]

Не могли бы вы сказать, какой умный способ это сделать? Большое спасибо заранее.

Ответы [ 2 ]

0 голосов
/ 16 апреля 2020

Я думаю, что приведенный ниже код прост для понимания благодаря одному l oop:)

$iterator = new RecursiveArrayIterator($inputArray);
$nestedIterator = new RecursiveIteratorIterator($iterator);

$output = [];
foreach($nestedIterator as $nestedKey=>$value) {
    $output["{$iterator->key()} {$nestedKey}"] = $value; 
}
unset($inputArray); // if you need
print_r($output);

из c, два цикла часто умны и понятны.

0 голосов
/ 16 апреля 2020

Просто работая со структурами данных, я нашел решение:

$cleanData = [];
foreach ($data as $day => $arr) {
    foreach ($arr as $hour => $value)
        $cleanData[$day.' '.$hour] = $value;
}

Некоторое улучшение или какой-то более разумный способ? Что вы думаете о решении? Еще раз спасибо.

...