从url到数组的PHP $ _GET值(自定义函数)

问题描述 投票:0回答:2

可以说我有一个:

$url = "bla.php?test1=a&test2=b&test1=c&test2=d&test1=e&test2=f&test1=g&test2=h&test1=i&test2=j";

然后我希望运行自定义函数getToArray(“test1”),它将创建一个值为[“a”,“c”,“e”,“g”,“i”]的数组

我想弄清楚怎么样,但到目前为止还没有运气。

请注意,如果使用getToArray(“test2”),$ _GET中的最后一个值将是“j”,这是字符串的结尾...

php arrays url get
2个回答
0
投票

这应该做你想要的。基本上它继续爆炸url,首先由?获取查询字符串,然后由&获取单独的键/值对,然后通过=获得键和值的每个对。如果密钥与搜索字符串匹配,则将其添加到输出数组中。

function getToArray($url, $key) {
    $values = array();
    list (, $query_string) = explode('?', $url, 2);
    foreach (explode('&', $query_string) as $param) {
        list($k, $v) = explode('=', $param, 2);
        if ($k == $key) $values[] = $v;
    }
    return $values;
}
print_r(getToArray($url, 'test1'));
print_r(getToArray($url, 'test2'));

输出:

Array ( [0] => a [1] => c [2] => e [3] => g [4] => i ) 
Array ( [0] => b [1] => d [2] => f [3] => h [4] => j )

Demo on 3v4l.org


0
投票

您可以先从网址中删除第一个细分。

然后由&=爆炸

function getToArray($url, $key)
{
    $arr  = explode("&", $url);
    $temp = [];
    array_walk($arr, function ($item, $key) use (&$temp) {
        $d             = explode('=', $item);
        $temp[$d[0]][] = $d[1];
    });
    return $temp[$key];
}
$url  = str_replace('bla.php?', '', "bla.php?test1=a&test2=b&test1=c&test2=d&test1=e&test2=f&test1=g&test2=h&test1=i&test2=j");
$result = getToArray($url, 'test1');
print_r($result);

Demo

© www.soinside.com 2019 - 2024. All rights reserved.