2012-01-04 53 views
5

我已經搜索喜和低的解決方案。我有一個動態的多維數組,我需要分解和urlencode。項目的數量將會改變,但它們將始終具有相同的密鑰。如何urlencode多維數組?

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

每個數組都有一個Form Name和一個Form Value。

這就是我試圖去:

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

每次我和他們分手了我結束了:FORM_NAME =>或的productID類似的東西。

我試圖把結果再進行urlencode他們:

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

何不乾脆'$ fromFields =陣列( '的productID'=> 13,......)'? – 2012-01-04 22:02:55

+0

該腳本將不知道密鑰是什麼。它們將根據哪個頁面調用它而改變。這是wordpress中的元數據存儲,取決於哪個帖子正在調用腳本。$鍵將會改變。 – krazymatty 2012-01-04 22:08:07

+0

也許有人有一個更好的方式來存儲動態數組,以便更容易的建議。 – krazymatty 2012-01-04 22:09:37

回答

3

這將返回值,而不管鍵的名稱如何。

$result = array(); 

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

foreach循環通過主陣列,存儲所述subarrrays在變量$value。函數array_values將每個數組的所有值作爲新的數值數組返回。 [form_name]的值將存儲在第一個索引中,[form_value]存儲在第二個索引中。

內置的http_build_query函數將返回一個urlencoded字符串。

+0

哇,這工作!我還不明白,但它的工作原理!非常感謝。 – krazymatty 2012-01-05 01:26:44

16

可以使用序列化和反序列化的:

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

,然後將其解碼:

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

如果它只是一個數組,那麼''json_encode()''''json_decode()''對於'serialize()'是可取的,因爲它具有更簡單的結構並導致更短的字符串。它也更便攜(像'JS'等) – konsolenfreddy 2012-01-05 06:39:09

-1

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

它返回數組。 – srokatonie 2018-02-07 13:56:18