PHP Url字符串到数组

时间:2014-08-20 08:29:20

标签: php arrays string explode

我试图找出是否有任何函数可以分割字符串,如:

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;

}

3 个答案:

答案 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)

使用regexp解决此问题。

([^=]+)\=([^\|]+)

http://regex101.com/r/eQ9tW8/1

答案 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()或类似的东西(如果可能)。