Вытянуть данные из строки

166
28 октября 2019, 20:10

Получаю строки данных погоды в следующем формате:

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
Answer 1

Как по мне, этот вариант логичнее, если в строке встречается равное количество ключей и значений. Ну, в конце концов, велосипед тоже код :)

$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

Answer 2

Поскольку входная строка имеет заданный формат, то я рекомендовал бы использовать регулярные выражения. В 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
)
READ ALSO
Название файла для file_put_content()

Название файла для file_put_content()

Мне нужно сделать следующее:

153
Не применяется стиль

Не применяется стиль

Не применяются два стиля для телефонаНа ПК все работает

137
Не работает PHP (PDO/ INSERT/ SELECT)

Не работает PHP (PDO/ INSERT/ SELECT)

Я начал изучать и PHP, и ASPNET, пока что у меня в голове каша

122
Как работает std::weak_ptr?

Как работает std::weak_ptr?

Если изначально std::weak_ptr указывал на нулевой указатель std::shared_ptr:

164