我试图找出是否有任何函数可以分割字符串,如:
keyword=flower|type=outdoors|colour=red
到数组:
array('keyword' => 'flower', 'type' => 'outdoors', 'colour' => 'red')
目前我构建了一个自定义函数,该函数使用explode
首先使用分隔符|
拆分元素,然后使用赋值符号=
拆分每个元素,但是可能是通过指定字符串分隔符可以开箱即用的本机函数?
我写的函数看起来像这样:
public static function splitStringToArray(
$string = null,
$itemDivider = '|',
$keyValueDivider = '='
) {
if (empty($string)) {
return array();
}
$items = explode($itemDivider, $string);
if (empty($items)) {
return array();
}
$out = array();
foreach($items as $item) {
$itemArray = explode($keyValueDivider, $item);
if (
count($itemArray) > 1 &&
!empty($itemArray[1])
) {
$out[$itemArray[0]] = $itemArray[1];
}
}
return $out;
}
答案 0 :(得分:2)
$string = "keyword=flower|type=outdoors|colour=red";
$string = str_replace('|', '&', $string);
parse_str($string, $values);
$values=array_filter($values); // Remove empty pairs as per your comment
print_r($values);
<强>输出强>
Array
(
[keyword] => flower
[type] => outdoors
[colour] => red
)
<强> Fiddle 强>
答案 1 :(得分:0)
答案 2 :(得分:0)
问题是您所选择的在字符串中表示变量的格式是非标准的。如果您能够将|
分隔符更改为&
字符,您将拥有(看起来像什么)来自URL的查询字符串 - 您将能够轻松地解析它:
$string = "keyword=flower&type=outdoors&colour=red";
parse_str( $string, $arr );
var_dump( $arr );
// array(3) { ["keyword"]=> string(6) "flower" ["type"]=> string(8) "outdoors" ["colour"]=> string(3) "red" }
我建议更改来源的分隔符,而不是手动将其替换为replace()
或类似的东西(如果可能)。