2012-01-04 25 views
5

Ho cercato hi e low per una soluzione. Ho una matrice multidimensionale dinamica che ho bisogno di scomporre e urlencode. Il numero di elementi cambierà ma avranno sempre le stesse chiavi.Come urlencode un array multidimensionale?

$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)) 

Ogni array ha un nome modulo e un valore modulo.

Questo è quello che sto cercando di arrivare a:

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

Ogni volta che provo e li contempla io alla fine con: FORM_NAME => productID o qualcosa di simile.

sto cercando di prendere i risultati e poi li UrlEncode:

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

perché non semplicemente '$ fromFields = array ('productID' => 13, ...)'? –

+0

Lo script non saprà quali sono le chiavi. Cambieranno a seconda della pagina che sta chiamando. Questo è un meta data store in un wordpress e dipende da quale post sta chiamando lo script. I tasti $ cambieranno. – krazymatty

+0

Forse qualcuno ha un suggerimento su un modo migliore per archiviare l'array dinamico per poterlo chiamare più facilmente. – krazymatty

risposta

3

Ciò restituirà i valori indipendentemente dai nomi dei tasti.

$result = array(); 

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

I foreach passanti attraverso la matrice principale, memorizzando i subarrrays nella variabile $value. La funzione array_values restituisce tutti i valori da ciascun array come un nuovo array numerico. Il valore di [nome_stampante] verrà memorizzato nel primo indice, [valore_forma] nel secondo.

La funzione integrata http_build_query restituirà una stringa con codifica urlata.

+0

WOW Questo ha funzionato! Non lo capisco ancora ma funziona! Grazie mille. – krazymatty

16

è possibile utilizzare serializzare e l'unserialize:

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

e poi a decodificarlo:

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

Se è solo un array, 'json_encode()'/'json_decode()' è preferibile a 'serialize()' in quanto ha una struttura più semplice e si traduce in una stringa più corta. È anche più portabile (come per 'JS' e simili) – konsolenfreddy

-1

funzione personalizzata per chiavi e valori di array 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

Restituisce l'array. – srokatonie

Problemi correlati