Получаю строки данных погоды в следующем формате:
Date, Time, ABKtMSUNT000 [h], ABKtMWDIR012 [Deg.M], ABKtMWSPD012 [m/s], ABKtMTEMP002 [deg.C], ABKtMRAIN000 [mm/h] 190227, 2020, 9, 245.8, 2.886, 5.753, 0
Подскажите, как мне нужно вытянуть данные, чтобы их к массиву следующего вида:
[Date] => 190227
[Time] => 2020
[h] => 9
[Deg.M] => 245.8
[m/s] => 2.886
[deg.C] => 5.753
[mm/h] => 0
Как по мне, этот вариант логичнее, если в строке встречается равное количество ключей и значений. Ну, в конце концов, велосипед тоже код :)
$string = 'Date, Time, ABKtMSUNT000 [h], ABKtMWDIR012 [Deg.M], ABKtMWSPD012 [m/s],
ABKtMTEMP002 [deg.C], ABKtMRAIN000 [mm/h] 190227, 2020, 9, 245.8, 2.886, 5.753, 0';
$pr = preg_replace(['/(?<!,)(?=\h\d+)/', '/\w+\h\[([^]]+)\]/'], [',', '$1'], $string);
$ef = array_map('trim', explode(',', $pr));
$ex = array_chunk($ef, count($ef) / 2);
$data = array_combine($ex[0], $ex[1]);
print_r($data);
https://ideone.com/PNUAkF
Поскольку входная строка имеет заданный формат, то я рекомендовал бы использовать регулярные выражения. В php для регулярных выражений можно воспользоваться функцией preg_match()
$str = '190227, 2020, 9, 245.8, 2.886, 5.753, 0';
$pattern = '/([\S]*),\s([\S]*),\s([\S]*),\s([\S]*),\s([\S]*),\s([\S]*),\s([\S]*)/m';
preg_match($pattern, $str, $matches);
$result = [
"Date" => intval($matches[1]),
"Time" => intval($matches[2]),
"h" => intval($matches[3]),
"Deg.M" => floatval($matches[4]),
"m/s" => floatval($matches[5]),
"deg.C" => floatval($matches[6]),
"mm/h" => floatval($matches[7])
];
Таким образом в $result
окажется то что вам требуется.
print_r($result)
выведет:
Array
(
[Date] => 190227
[Time] => 2020
[h] => 9
[Deg.M] => 245.8
[m/s] => 2.886
[deg.C] => 5.753
[mm/h] => 0
)
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Я начал изучать и PHP, и ASPNET, пока что у меня в голове каша
Если изначально std::weak_ptr указывал на нулевой указатель std::shared_ptr: