PHP извлекает значение из строки между <star>t и <end> - PullRequest
2 голосов
/ 25 января 2012

Я хочу извлечь некоторые значения из строки (результат запроса БД). Пример такой строки:

$data="tostore1:1 = INTEGER: 10000000
       tostore1:2 = INTEGER: 1000000
       something else something else
       tostore2:1 = STRING: 'test1'
       something else something else
       tostore2:2 = STRING: 'test2'
       tostore3:1 = INTEGER: 1000";

Я бы получил два массива. Одна содержит 10000000, 'test1' и 1000, а другая содержит 1000000, 'test2'.

В качестве альтернативы, если я хочу извлечь tostore2:1 значение, начало может быть tostore2:1, а конец CR LF @ конец строки

Я ищу наиболее оптимизированный способ сделать это

1 Ответ

1 голос
/ 25 января 2012

Использование простого регулярного выражения

$result = array();
$pattern = "/tostore\d+:(\d+)\s+=\s+[A-Z]+:\s+('?)([\d\w]+)(\2?)/i";
preg_match_all($pattern, $data, $m);

$keys = $m[1];
$values = $m[3];
$len = count($keys);
for($i=0;$i<$len;$i++){
    $result[$keys[$i]][]=$values[$i];
}

$arr1 = $result[1];
$arr2 = $result[2];
...