从字符串中提取params的最佳方法

时间:2011-09-20 16:10:46

标签: php string text-parsing

我有一个name="value"类型的字符串,看起来像......

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

我需要一个泛型函数来解析这种类型的字符串,从这种格式中提取所有名称/值对作为数组(总是在双引号内,每个参数由空格隔开,括在{}中)以及最初的开场词(在这种情况下为user)。

非常感谢任何想法。

4 个答案:

答案 0 :(得分:2)

$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
)

但是使用正则表达式来解决这个问题应该很容易,也更合适。

答案 1 :(得分:2)

基本上

 preg_match_all('~(\w+)="(.+?)"~', $string, $matches, PREG_SET_ORDER);
 foreach($matches as $m)
     $array[$m[1]] = $m[2]

答案 2 :(得分:0)

$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
}

未经测试!

答案 3 :(得分:0)

名称“james green”可以像这样提取

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

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

    echo $string; // james green
?>