有人可以帮忙解决这个正则表达式吗?
这是我尝试转换为php数组的示例字符串。
$str="hopOptions:hops hopOptions:salmonSafe region:domestic region:specialty region:imported"
我需要最终的aray:
$filters = array (
"hopOptions" => array("hops", "salmonSafe"),
"region" => array("domestic", "specialty", "imported")
);
非常感谢任何帮助或指示!
答案 0 :(得分:0)
我不知道php并想出了这个。希望有更好的方法。
$str = "hopOptions:hops hopOptions:salmonSafe region:domestic region:specialty region:imported";
// it creates an array of pairs
$ta = array_map(function($s) {return explode(":", $s);}, explode(" ", $str));
// this loop converts the paris into desired form
$filters = array();
foreach($ta as $pair) {
if (array_key_exists($pair[0], $filters)) {
array_push($filters[$pair[0]], $pair[1]);
}
else {
$filters[$pair[0]] = array($pair[1]);
}
}
print_r($filters);
输出:
Array
(
[hopOptions] => Array
(
[0] => hops
[1] => salmonSafe
)
[region] => Array
(
[0] => domestic
[1] => specialty
[2] => imported
)
)
答案 1 :(得分:0)
更快就是避免使用正则表达式并使用两个爆炸调用:
代码:
$str = "hopOptions:hops hopOptions:salmonSafe region:domestic region:specialty region:imported";
foreach(explode(' ',$str) as $pair){
$x=explode(':',$pair);
$result[$x[0]][]=$x[1];
}
var_export($result);
或者使用正则表达式...
代码:
$str = "hopOptions:hops hopOptions:salmonSafe region:domestic region:specialty region:imported";
if(preg_match_all('/([^ ]+):([^ ]+)/',$str,$out)){
foreach($out[1] as $i=>$v){
$result[$v][]=$out[2][$i];
}
var_export($result);
}else{
echo "no matches";
}