Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP Url字符串到数组_Php_Arrays_String_Explode - Fatal编程技术网

PHP Url字符串到数组

PHP Url字符串到数组,php,arrays,string,explode,Php,Arrays,String,Explode,我试图找出是否有任何函数可以拆分字符串,如: keyword=flower|type=outdoors|colour=red 要设置数组,请执行以下操作: array('keyword' => 'flower', 'type' => 'outdoors', 'colour' => 'red') 目前,我构建了一个自定义函数,它使用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;

}

使用regexp解决此问题

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

输出

Array
(
    [keyword] => flower
    [type] => outdoors
    [colour] => red
)

问题在于,您选择的在字符串中表示变量的格式是非标准的。如果您能够将
|
分隔符更改为
&
字符,那么您将拥有一个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()
或类似的内容(如果可能)。

没有。但是,您可以使用
parse_str
函数(并将
更改为
&
parse_str(str_replace(“|”、“&”、$string),$array)太棒了-你能把它作为一个答案贴出来,这样我就可以把它标记为已回答了吗?对于这种情况,正则表达式似乎有点过头了,你不这么认为吗?谢谢-我会接受这个答案,这也是@H2Ooooo早些时候以较短的格式提出的建议。哎呀,我对写一个答案很感兴趣,我没有看评论,或者我不会回答,因为你已经有了你的解决方案。@SpencerMark无需担心-这个答案更具描述性,有演示和输出。通常,当我的时间不多时,我只会发表一个简短的评论,而不是回答谢谢大家-感谢你们的快速响应。如果你想从最终的数组中删除所有的空元素,你可以在最后添加这一行<代码>$values=数组过滤器($values)
$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" }