PHP中的字符串解析 [英] String parsing in PHP
本文介绍了PHP中的字符串解析的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试解析PHP中的字符串:
I am trying to parse a string in PHP:
-father_name "John" -father_weight 44.50
-kid >name "Marko" >age 12
-kid >name "Sevda" >age 17
-kid >name "Nathan" >age 19
主要有两种形式:
- 属性(例如-father,-weight,-kid)
- 子属性(例如> name,> age)
注意:属性不固定,也不总是用单个空格隔开
Note: Attributes are NOT FIXED and NOT ALWAYS SEPERATED BY single space
它们的值有两种类型:
- 字符串(如"Marko")
- 整数或十进制(如12.00)
输出将是:
$array['attributes'] = array('father_name ','father_weight ');
$array['attributes']['kid'][] = array('name' => "Marko", 'age' => 12);
$array['attributes']['kid'][] = array('name' => "Sevda", 'age' => 17);
$array['attributes']['kid'][] = array('name' => "Nathan", 'age' => 19);
它应该分别返回 FORMS (属性和子属性)和 VALUES .
It should return FORMS (attrs and sub-attrs) and VALUES SEPARATELY.
如何巧妙地在 PHP 中解析此行?
How can I parse this line in PHP cleverly?
最后注:我为此找到了解决方案:YAML.
Last Note: Solution I found for this: YAML.
推荐答案
尝试一下:
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']);
返回:
Marko
注意:您可以指定更多的分隔符数组项目,这是您具有的每个属性级别的项目.
NOTE: You can specify more separator array items, an item for each attribute level you have.
希望这会有所帮助.
这篇关于PHP中的字符串解析的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文