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_encodejson_decode。如果不是这样就容易多了:

function getDynamicProp($string, $property) {
    $string = str_replace(array(':',';'), array('=','&'), $string);
    parse_str($string, $result);
    return $result[$property];
}

或将它们存储为 cheese=no&sauce=yes&chicken=brown。那就更简单了。