найти — Парсер свойств PHP

Я делаю анализатор свойств, и я хочу, чтобы он мог анализировать строку любой длины.

Например, я хотел бы иметь возможность сделать следующий вызов:

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;

}

0

Решение

Вы можете попробовать это. Функция использует 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");
0

Другие решения

Я думаю, ты усложняешь, или я не понял, чего ты хочешь.
Я пойду с регулярным выражением вместо поиска позиции.

Вот что я буду использовать:

function getDynamicProp($string , $property){
if (preg_match('/(^|;)' . $property . ':(?P<value>[^;]+)/', $string, $matches)) {
return $matches['value'];
}
return false;
}

Проверьте Вот визуализировать регулярное выражение

0

Вы бы лучше использовать 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, Тогда еще проще.

0
По вопросам рекламы [email protected]