2012-01-04 24 views
5

He buscado de alta y baja para encontrar una solución. Tengo una matriz dinámica multidimensional que necesito dividir y urlencode. La cantidad de elementos cambiará pero siempre tendrán las mismas claves.¿Cómo urlencode una matriz multidimensional?

$formFields = Array ( 
[0] => Array ([form_name] => productID [form_value] => 13) 
[1] => Array ([form_name] => campaign [form_value] => [email protected]) 
[2] => Array ([form_name] => redirect [form_value] => http://example.com)) 

Cada matriz tiene un Nombre de formulario y un Valor de formulario.

Esto es lo que estoy tratando de llegar a:

$desired_results = 
productID => 13 
campaign => [email protected] 
redirect => http://example.com 

Cada vez que intento y dividirlos termino con: nombre_formulario => productID o algo por el estilo.

Estoy tratando de tomar los resultados y luego urlencode ellos:

productID=13&campaign=email&gmail.com&redirect=http://example.com& 
+0

por qué no simplemente '$ fromFields = array ('productID' => 13, ...)'? –

+0

El script no sabrá cuáles son las claves. Cambiarán según la página que lo llame. Esta es una tienda de metadatos en wordpress y dependiendo de qué publicación llame al script. Las teclas $ cambiarán. – krazymatty

+0

Quizás alguien tenga una sugerencia sobre una mejor forma de almacenar la matriz dinámica para llamarla más fácil. – krazymatty

Respuesta

3

Esto devolverá los valores independientemente de los nombres de las teclas.

$result = array(); 

foreach ($formFields as $key => $value) 
{ 
    $tmp = array_values($value); 
    $result[$tmp[0]] = $tmp[1]; 
} 
print(http_build_query($result)); 

Los foreach bucles a través de la matriz principal, el almacenamiento de los subarrrays en la variable $value. La función array_values devuelve todos los valores de cada matriz como una nueva matriz numérica. El valor de [form_name] se almacenará en el primer índice, [form_value] en el segundo.

La función incorporada http_build_query devolverá una cadena urlencoded.

+0

WOW ¡Funcionó! Todavía no lo entiendo pero funciona! Muchas gracias. – krazymatty

16

puede utilizar serialización y la unserialize:

$str = urlencode(serialize($formFields)); 

y después de decodificarlo:

$formFields = unserialize(urldecode($str)); 
+3

Si es solo una matriz, 'json_encode()'/'json_decode()' es preferible a 'serialize()' ya que tiene una estructura más simple y da como resultado una cadena más corta. También es más portátil (como 'JS' y tal) – konsolenfreddy

-1

función personalizada para claves y valores de matriz urlencode.

function urlencode_array($array){ 
    $out_array = array(); 
    foreach($array as $key => $value){ 
    $out_array[urlencode($key)] = urlencode($value); 
    } 
return $out_array; 
} 
-1
<!-- Encode entire array here --> 

function encode(&$item, $key) { 
$item = rawurlencode($item); 
} 

array_walk_recursive($input_array, 'encode'); 
+0

Devuelve Array. – srokatonie

Cuestiones relacionadas