Как я могу разобрать URL-адрес в ассоциативный массив?

#php #arrays #url

#php #массивы #url

Вопрос:

У меня есть URL, подобный http://example.com/size/large/color/red . Как я могу преобразовать URL-адрес в ассоциативный массив, чтобы в итоге получить:

 $my_array("size" => "large", "color" => "red");
 

Имейте в виду, что URL-адрес может выглядеть так http://example.com/color/red/size/large/type/round . Таким образом, в принципе, ключи и значения могут быть любыми. Но за их ключом всегда будет следовать значение.

Ответ №1:

 $url = 'http://example.com/size/large/color/red';

$path = trim(parse_url($url, PHP_URL_PATH), '/');
$path_chunks = preg_split('// /', $path);

$arr = array();

for($i = 0, $count = count($path_chunks); $i < $count; $i  = 2)
{
   $arr[$path_chunks[$i]] = $path_chunks[$i   1];
}
 

Ответ №2:

Вы можете извлечь части, составляющие URL-адрес, затем перебрать их 2 на 2 и назначить первую в качестве ключа, а вторую — в качестве значения.

 $url = 'http://example.com/color/red/size/large/type/round';
$my_array = array();
$parts = explode('/', $url);
for ($i = 3, $len = count($parts); $i < $len; $i  = 2)
{
    $my_array[$parts[$i]] = $parts[$i   1];
}
 

Это приведет к:

 Array
(
    [color] => red
    [size] => large
    [type] => round
)
 

Комментарии:

1. Print_r для этого возвращает just Array ( [color] => red [] => ) — значение, оно просто показывает последнюю пару ключ / значение.

2. @joeyr, ты уверен? Я просто запустил точный код выше, и я получил что-то другое. Вставлено в ответ.