2011-11-09 19 views
23

tengo estas URL desde un registro web:PHP url para gama

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 PHPso i tendrá una serie como esta

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

luego, puedo hacer un bucle en esa matriz para encontrar duplicados o validar la información correctamente.

Respuesta

26

Puede haber una mejor manera de hacer esto, pero esto es lo que 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('/', $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

+0

Muchas gracias – eric

+0

muy completo - gracias. – foxybagga

26

PHP tiene una función nativa para eso, la función parse_str. Puede usarlo como:

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

Esto hará justo lo que necesita.

+2

¿cómo funcionará esto para el registro web? – Tech4Wilco

+0

Este es el método preferido ya que admite cualquier cadena estándar que se separe por & =. Funciona muy bien para las respuestas curl – Dss

+1

Esto debería ser el awser aceptado. –

6

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

0

Se podría hacer:

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

+0

que funciona pero me falta la "página" – eric

1

Suponiendo por su pregunta que camino siempre será /page, la matriz que contiene las direcciones URL analizados no puede tener varios índices page 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 todos los URL que desea analizar en formato de cadena. $urls_parsed es la matriz resultante que contiene las URL analizadas en el formato que solicitó.

1

función Uso parse_url como

<?php 
$url = 'http://username:[email protected]/path?arg=value#anchor'; 
print_r(parse_url($url)); 
echo parse_url($url, PHP_URL_PATH); 
?> 

que le dará la siguiente matriz de salida

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

Y a partir de la consulta se puede dividir fácilmente como a (clave, valor) paira. Espero que esto ayude. :)