如何正确地将字符串解析为关联数组?
有一条线p1-tuttext-p2-555-p3-text-p4-text3
它需要变成一个形式的数组:
p1 => tuttext
p2 => 555
p3 => text
p4 => text3
我是怎么做到的:
$new_fields = [];//новый массив
$p = 0;//объявляем новую переменную, для добавления значения в массив
$fields = explode('-', $fields);//преобразуем всю строку в массив
foreach ($fields as $field) {//перебираем массив
if($p) {//проверяем есть ли ключ в переменной p
$new_fields[$p] = $field;//если есть добавляем ключ и значения в новый массив
$p = 0;//обнуляем переменную для ключа
}
if(stristr($field, 'p')) {//проверяем вхождение `p` в строке
$p = $field;//если есть, то это у нас ключ, добавляем его в массив
}
}
有没有更简单的方法?
----更新----
根据新信息:
p1-tuttext是p1字母替换+id,最大可以是99999 (p99999)p1-tuttext-tuttext这是名称的音译,可以以 tut-text(p1-tut-text)的形式找到
选择了 Vfvtnjd 选项:
$string = 'p1-tuttext-p2-555-p3-text-p4-text3';
$pattern[] = '/(.|$)p(\d+)(.|$)/i';
$pattern[] = '/p(\d+)(.|$)/i';
$replacement[] = '&p$2=';
$replacement[] = 'p$1=';
$result = preg_replace($pattern, $replacement, $string);
parse_str($result, $arr);
print_r($arr);
假设你的键值是交替的,那么你可以先用连字符分割,然后成对,然后将其添加到数组中
使用正则表达式,您可以将字符串拆分为子字符串数组,然后将其拆分为“key => value”对,并将它们替换为结果数组:
结果:
好吧好吧 =)