我有一个name="value"
类型的字符串,看起来像......
{user type="active" name="james green" id="45" group="active users"}
我需要一个泛型函数来解析这种类型的字符串,从这种格式中提取所有名称/值对作为数组(总是在双引号内,每个参数由空格隔开,括在{}
中)以及最初的开场词(在这种情况下为user
)。
非常感谢任何想法。
答案 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
?>