Лучший способ извлечь параметры из строки - PullRequest
1 голос
/ 20 сентября 2011

У меня есть строка типа name="value", которая выглядит как ...

{user type="active" name="james green" id="45" group="active users"}

Мне нужна универсальная функция, которая будет анализировать этот тип строки, извлекая все пары имя / значение в виде массива из этого формата (всегда в двойных кавычках, а каждый параметр отделяется пробелом, заключенным в {}). в качестве начального начального слова (в данном случае user).

Любые идеи будут высоко оценены.

Ответы [ 4 ]

2 голосов
/ 20 сентября 2011

в основном

 preg_match_all('~(\w+)="(.+?)"~', $string, $matches, PREG_SET_ORDER);
 foreach($matches as $m)
     $array[$m[1]] = $m[2]
2 голосов
/ 20 сентября 2011
$string = '{user type="active" name="james green" id="45" group="active users"}';
$user = simplexml_load_string('<' . substr($string, 1, -1) .'/>');
print_r(current($user));

даст

Array
(
    [type] => active
    [name] => james green
    [id] => 45
    [group] => active users
)

Но это должно быть легко и более уместно решить с помощью регулярных выражений.

0 голосов
/ 20 сентября 2011

имя "Джеймс Грин" можно извлечь, как это

<?php
    $point=strpos( $string, 'name="' ) + strlen('name="');
    $string = substr($string,$point);

    $point=strpos( $string, '"' );
    $string = substr($string,$point);

    echo $string; // james green
?>
0 голосов
/ 20 сентября 2011
$string = '{user type="active" name="james green" id="45" group="active users"}';
$string = str_replace('{', '', $string); // delete brackets
$array = explode(' ', $string);

$var = array_shift($array); // <-- here is 'user'

foreach($array as $pair)
{
$arr = explode('=', $pair);
$arr[0]; // <-- here is the key
$arr[1]; // <-- here is the value
}

Не проверено!

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