URL de PHP a la matriz

3 minutos de lectura

avatar de usuario de eric
eric

Tengo estas URL de un registro web:

http://www.domain.com/page?s=194&client=151678&m=a4a&v=1&g=54
http://www.domain.com/page?s=51&client=617171&m=b4z&v=8&g=97

¿Cómo puedo convertir esta URL en una matriz en PHP para tener una matriz como esta?

array(
 'page' => array(
   's' => 194,
   'client' => 151678
   'm' => 'a4a',
   'v' => 1,
   'g' => 54
 )
 etc..
)

luego, más tarde, puedo recorrer esa matriz para encontrar duplicados o validar la información correctamente.

Avatar de usuario de Oldskool
Vieja escuela

PHP tiene una función nativa para eso, el parse_str función. Puedes usarlo como:

parse_str($_SERVER['QUERY_STRING'], $outputArray);

Esto hará justo lo que necesitas.

  • Este es el método preferido ya que admite cualquier cadena estándar que se separe por & y =. También funciona muy bien para las respuestas de rizo.

    – DSS

    21 de noviembre de 2013 a las 14:37

Puede haber una mejor manera de hacer esto, pero esto es lo que se me ocurrió.

<?php

    $url="http://www.domain.com/page?s=194&client=151678&m=a4a&v=1&g=54";
    $remove_http = str_replace('http://', '', $url);
    $split_url = explode('?', $remove_http);
    $get_page_name = explode("https://stackoverflow.com/", $split_url[0]);
    $page_name = $get_page_name[1];

    $split_parameters = explode('&', $split_url[1]);

    for($i = 0; $i < count($split_parameters); $i++) {
        $final_split = explode('=', $split_parameters[$i]);
        $split_complete[$page_name][$final_split[0]] = $final_split[1];
    }

    var_dump($split_complete);

?>

http://codepad.org/xTsAks46

avatar de usuario de matzino
matzino

Con parse_url() puede analizar la URL en una matriz asociativa. En la matriz de resultados, obtiene, entre otros, la parte de consulta. Entonces puedes usar parse_str() para analizar la parte de la consulta en su nueva matriz.

Avatar de usuario de Kostas Andrianopoulos
Kostas Andrianopoulos

Suponiendo por su pregunta que el camino siempre será /pagela matriz que contiene las URL analizadas no puede tener varios page índices por lo que debe utilizar índices numéricos.

Prueba esto:

$urls_parsed = array();
foreach ($url_strings as $url_string) {
    $url = parse_url($url_string);
    $urls_parsed[] = parse_str($url['query']);
}

$url_strings es una matriz que contiene todas las URL que desea analizar en formato de cadena.
$urls_parsed es la matriz resultante que contiene las URL analizadas en el formato que solicitó.

Utilice la función parse_url como

<?php
$url="http://username:password@hostname/path?arg=value#anchor";
print_r(parse_url($url));
echo parse_url($url, PHP_URL_PATH);
?>

Lo que le dará la siguiente salida de matriz

Array
(
[scheme] => http
[host] => hostname
[user] => username
[pass] => password
[path] => /path
[query] => arg=value
[fragment] => anchor
)

Y a partir de la consulta, puede dividirla fácilmente en pares (clave, valor). Espero que esto ayude.:)

Avatar de usuario de Nicola Peluchetti
Nicola Peluchetti

Podrías hacerlo:

function convertUrlToArray($url){
    $url = str_replace("http://www.domain.com/page?", "", $url);
    $urlExploded =  explode("&", $url);
    $return = array();
    foreach ($urlExploded as $param){
        $explodedPar = explode("=", $param);
         $return[$explodedPar[0]] = $explodedPar[1];
    }
    return $return;

}

$url1 = convertUrlToArray("http://www.domain.com/page?s=51&client=617171&m=b4z&v=8&g=97");
var_dump($url1);

ejemplo aquí http://codepad.org/KIDKPzaU

¿Ha sido útil esta solución?