PHP 属性解析器
PHP Properties Parser
我正在制作一个 属性 解析器,我希望它能够解析任意长度的字符串。
例如,我希望能够进行以下调用:
getDynamicProp("cheese:no;sauce:yes;chicken:brown", "sauce");
并从中返回 "yes"
。
这是我目前得到的:
function getDynamicProp($string , $property){
$args = func_num_args();
$args_val = func_get_args();
$strlen = mb_strlen($string);
$propstrstart = mb_strpos($string , $property . ":");
$propstrend1 = substr($string , $propstrstart , )
$propstrend = mb_strpos($string , ";" , $propstrstart);
$finalvalue = substr($string , $propstrstart , $propstrend);
$val = str_replace($property . ":" , "" , $finalvalue);
$val2 = str_replace(";" , "" , $val);
return $val2;
}
我觉得你把它弄得太复杂了,或者我不明白你想要什么。
我将使用正则表达式而不是进行位置搜索。
以下是我将使用的内容:
function getDynamicProp($string , $property){
if (preg_match('/(^|;)' . $property . ':(?P<value>[^;]+)/', $string, $matches)) {
return $matches['value'];
}
return false;
}
选中 here 以可视化正则表达式
你可以试试这个。该函数使用 explode 将字符串转换为更易于操作的数组:
function getDynamicProp($string , $property){
$the_result = array();
$the_array = explode(";", $string);
foreach ($the_array as $prop) {
$the_prop = explode(":", $prop);
$the_result[$the_prop[0]] = $the_prop[1];
}
return $the_result[$property];
}
$the_string = "cheese:no;sauce:yes;chicken:brown";
echo getDynamicProp($the_string,"cheese");
echo getDynamicProp($the_string,"sauce");
echo getDynamicProp($the_string,"chicken");
如果您能控制此字符串,最好使用 json_encode
和 json_decode
。如果不是这样就容易多了:
function getDynamicProp($string, $property) {
$string = str_replace(array(':',';'), array('=','&'), $string);
parse_str($string, $result);
return $result[$property];
}
或将它们存储为 cheese=no&sauce=yes&chicken=brown
。那就更简单了。
我正在制作一个 属性 解析器,我希望它能够解析任意长度的字符串。
例如,我希望能够进行以下调用:
getDynamicProp("cheese:no;sauce:yes;chicken:brown", "sauce");
并从中返回 "yes"
。
这是我目前得到的:
function getDynamicProp($string , $property){
$args = func_num_args();
$args_val = func_get_args();
$strlen = mb_strlen($string);
$propstrstart = mb_strpos($string , $property . ":");
$propstrend1 = substr($string , $propstrstart , )
$propstrend = mb_strpos($string , ";" , $propstrstart);
$finalvalue = substr($string , $propstrstart , $propstrend);
$val = str_replace($property . ":" , "" , $finalvalue);
$val2 = str_replace(";" , "" , $val);
return $val2;
}
我觉得你把它弄得太复杂了,或者我不明白你想要什么。 我将使用正则表达式而不是进行位置搜索。
以下是我将使用的内容:
function getDynamicProp($string , $property){
if (preg_match('/(^|;)' . $property . ':(?P<value>[^;]+)/', $string, $matches)) {
return $matches['value'];
}
return false;
}
选中 here 以可视化正则表达式
你可以试试这个。该函数使用 explode 将字符串转换为更易于操作的数组:
function getDynamicProp($string , $property){
$the_result = array();
$the_array = explode(";", $string);
foreach ($the_array as $prop) {
$the_prop = explode(":", $prop);
$the_result[$the_prop[0]] = $the_prop[1];
}
return $the_result[$property];
}
$the_string = "cheese:no;sauce:yes;chicken:brown";
echo getDynamicProp($the_string,"cheese");
echo getDynamicProp($the_string,"sauce");
echo getDynamicProp($the_string,"chicken");
如果您能控制此字符串,最好使用 json_encode
和 json_decode
。如果不是这样就容易多了:
function getDynamicProp($string, $property) {
$string = str_replace(array(':',';'), array('=','&'), $string);
parse_str($string, $result);
return $result[$property];
}
或将它们存储为 cheese=no&sauce=yes&chicken=brown
。那就更简单了。