регулярное выражение для разделения форматированной строки на ассоциативный массив - PullRequest
1 голос
/ 24 ноября 2011

У меня есть строка, похожая на:

KEY1,"Value"KEY2,"Value"Key3,"Value"

Эта строка всегда будет варьироваться по количеству ключей / значений, в которых мне нужен ассоциативный массив:

array (
    'KEY1' => 'Value',
    'KEY2' => 'Value',
    'KEY3' => 'Value'
);

данных, содержащихся в строке, было бы лучше, если бы я использовал регулярное выражение?

Ответы [ 3 ]

2 голосов
/ 24 ноября 2011

Предполагая, что ваши значения не содержат ", вы можете сделать:

$str    = 'KEY1,"Value1"KEY2,"Value2"Key3,"Value3"';
$pieces = preg_split('/(?<=[^,]")/',$str,-1,PREG_SPLIT_NO_EMPTY);
$result = array();

foreach($pieces as $piece) {
        list($k,$v) = explode(",",trim$piece);
        $result[$k] = trim($v,'"');
}

Смотрите это в действии!

1 голос
/ 24 ноября 2011
php> $str = 'KEY1,"Value"KEY2,"Value"Key3,"Value"';

php> $hash = array();

php> preg_match_all("/(.*?),\"(.*?)\"/", $str, $m);

php> foreach($m[1] as $index => $key) {
 ... $hash[$key] = $m[2][$index];
 ... }

php> var_dump($hash);
array(3) {
  ["KEY1"]=>
  string(5) "Value"
  ["KEY2"]=>
  string(5) "Value"
  ["Key3"]=>
  string(5) "Value"
}
0 голосов
/ 24 ноября 2011

Если ключ меняется между значениями, вам понадобится preg_split (). Если ключ всегда один и тот же, то explode () должен быть более чем достаточным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...