时间:2011-01-06 17:16:02

标签: php parsing

2 个答案:

答案 0 :(得分:3)

试试这个:

function parse_attributes($string, $separators = array('-','>'), $level = 0){
    $attributes = explode($separators[$level], $string);
    $attrs = array();
    $ret_arr = array();
    foreach($attributes as $attribute){
        if(!empty($attribute)){
            $ex_attr = explode(' ',$attribute);
            if(!empty($ex_attr[1])){
                if(count($separators) > $level && strpos($attribute, $separators[$level+1])){
                    $ret = parse_attributes($attribute, $separators, $level+1);
                    array_push($ret_arr, $ret);
                }
                if (empty($ret_arr))
                    $attrs[$ex_attr[0]] = str_replace('"', '', $ex_attr[1]);
                else
                    $attrs[$ex_attr[0]] = $ret_arr;
            }
        }
    }
    return $attrs;
}

使用:

$returned = parse_attributes('-father_name "John" -father_weight 44.50 -kid >name "Marko" >age 12 -kid >name "Sevda" >age 17 -kid >name "Nathan" >age 19');

print_r($returned);

返回:

Array
(
    [father_name] => John
    [father_weight] => 44.50
    [kid] => Array
        (
            [0] => Array
                (
                    [name] => Marko
                    [age] => 12
                )

            [1] => Array
                (
                    [name] => Sevda
                    [age] => 17
                )

            [2] => Array
                (
                    [name] => Nathan
                    [age] => 19
                )

        )

)

使用:

echo($returned['kid'][0]['name']);

返回:

马尔科

注意:您可以指定更多分隔符数组项,即每个属性级别的项目。

希望这有帮助。

答案 1 :(得分:1)