Преобразовать строку в массив - PullRequest
0 голосов
/ 14 октября 2011

У меня есть следующая строка:

key:surname +++ value:Tesla|||key:name +++ value:Nikola|||key:age +++ value:86|||

Как с помощью PHP я могу преобразовать его в ассоциативный массив?Например:

echo $arr['surname'];
Tesla

Я пытаюсь, но не могу написать правильное выражение:

$str= "key:surname +++ value:Tesla|||key:name +++ value:Nikola|||key:age +++ value:86|||"; 
preg_match_all("regex_here",$str,$out); 
unset($out[0]); 
$out = array_combine($out[1],$out[2]) ; 
print_r($out); 

Спасибо.

Ответы [ 3 ]

2 голосов
/ 14 октября 2011

Это должно делать то, что вам нужно:

$str= "key:surname +++ value:Tesla|||key:name +++ value:Nikola|||key:age +++ value:86|||"; 
preg_match_all("/key:(.*?) \+\+\+ value:(.*?)\|\|\|/", $str, $out);
$out = array_combine($out[1], $out[2]) ; 
print_r($out);

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

1 голос
/ 14 октября 2011

Примерно так:

preg_match_all("/:(\w+).*?:(\w+)/", $str, $matches);
var_dump(array_combine($matches[1], $matches[2]));
0 голосов
/ 14 октября 2011

почему есть три + и три |,Если это ты делаешь это так.Я думаю, что вы могли бы изменить его на один.Тогда функция разнесения может помочь вам!

...