[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: распарсить строку
sergey_privacy
Есть у меня большое количество строк, которое надо распарсить на составные части. Не совсем понимаю, как лучше сделать. Строки вида:
A:Moscow, ul. Lenina 5 T:B O:Obuvnaya Fabrika
O:8736 T:F A:Saratov ul.Buhankina 9
O:Detskaya poliklinika 38 A:Nizhnie Perdunki T:NZMD
В каждой строке количество полей может меняться, поля могут быть с пробелами и без. Основное правило: поле начинается с большой буквы и двоеточия. Буква названия поля заранее не определена, со временем могут появляться еще. На выходе хочу получить массив типа:
[1] =>Array
(A=>Moscow, ul. Lenina 5 T=>B O=>Obuvnaya Fabrika)
[2] =>Array
(O=>8736 T=>F A=>Saratov ul.Buhankina 9)
[3] =>Array
(O=>Detskaya poliklinika 38 A=>Nizhnie Perdunki T=>NZMD)
Подскажите, как правильно это реализовать?
GET
sergey_privacy

Может быть через preg_replace_callback.

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
sergey_privacy
Цитата (GET @ 7.02.2015 - 12:45)
sergey_privacy

Может быть через preg_replace_callback.

Я ничего не собираюсь заменять, мне нужно строку разобрать на массив ключ=значение.
chee
Я так подозреваю это нужно делать регулярками, а так как у меня с ними плохие отношения, то я попробовал без них:

<?php
echo '<pre>';
$lines = array(
'A:Moscow, ul. Lenina 5 T:B O:Obuvnaya Fabrika',
'O:8736 T:F A:Saratov ul.Buhankina 9',
'O:Detskaya poliklinika 38 A:Nizhnie Perdunki T:NZMD',
);


function parse_string($string)
{
$pieces = str_split($string, 1);
$positions = array();
$result = array();

foreach ($pieces as $pos => $char) {
if ($char === ':') {
$positions[] = $pos;
}
}


foreach ($positions as $number => $pos) {
$nextPosition = null;
if (isset($positions[$number + 1])) {
$nextPosition = $positions[$number + 1] - ($pos + 1) - 1;
}

$result[$pieces[$pos - 1]] = trim(implode('', array_slice($pieces, $pos + 1, $nextPosition)));
}

return $result;
}

foreach ($lines as $line) {
var_dump($line);
print_r(parse_string($line));
}

результат

string(45) "A:Moscow, ul. Lenina 5 T:B O:Obuvnaya Fabrika"
Array
(
[A] => Moscow, ul. Lenina 5
[T] => B
[O] => Obuvnaya Fabrika
)
string(35) "O:8736 T:F A:Saratov ul.Buhankina 9"
Array
(
[O] => 8736
[T] => F
[A] => Saratov ul.Buhankina 9
)
string(51) "O:Detskaya poliklinika 38 A:Nizhnie Perdunki T:NZMD"
Array
(
[O] => Detskaya poliklinika 38
[A] => Nizhnie Perdunki
[T] => NZMD
)



_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.