PHP $ _GET значения из URL в массив (пользовательская функция) - PullRequest
0 голосов
/ 18 апреля 2019

Допустим, у меня есть:

$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 («test 2 ») последним значением из $ _GET будет «j», которое является концом строки ...

Ответы [ 2 ]

0 голосов
/ 18 апреля 2019

Вы можете сначала удалить первые сегменты из URL.

Затем взорваться на &, а затем =

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);

Демо

0 голосов
/ 18 апреля 2019

Это должно делать то, что вы хотите.По сути, он продолжает разбивать 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 )

Демонстрация на 3v4l.org

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...