utf8 keys intval array_values array_map array php arrays url

keys - PHP url a la matriz



php rename array key (6)

Con parse_url() puede analizar la URL a 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 a su nueva matriz.

Tengo estas direcciones 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? Tendré una matriz como esta

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

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


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

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

Esto hará justo lo que necesitas.


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


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(''/'', $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


Suponiendo que, en su pregunta, la ruta siempre será /page , la matriz que contiene las URL analizadas no puede tener índices de múltiples page por lo que debe usar í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 usted solicitó.


Usa 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 dividirlo fácilmente como (clave, valor) paira. Espero que esto ayude.:)