2017-01-18 52 views
-2

假設jQuery的序列化形式發送數據的,這是很難解密:PHP表單名稱分解

[someindex][0][anotherindex][0][] = 'value'

在PHP中,我需要把它分解成一個真正的數組,這就是:

array(
    someindex => array(
     0 => array(
      anotherindex => array(
      0 => array('value') 
     ) 
    ) 
    ) 
) 

有沒有這樣做的功能,或者我該如何實現?

編輯:

另一個詞,如果我有$name = '[someindex][0][anotherindex][0][]'作爲一個PHP串,我想創建一個相同結構的陣列

樣品:http://sandbox.onlinephpfunctions.com/code/5d604f087aab07d48be27969e94dc9656fd90ffd HTML客戶端:https://jsfiddle.net/bgay81q2/

JSON客戶發送的數據:

[{"name":"Data[index1][0][index2][0][]","value":"test"},{"name":"Data[index1][0][index2][0][]","value":"second value"}] 
+0

不知道我理解你的要求時,它填充'$ _POST'或 –

+4

PHP會自動做什麼'$ _GET' – Quentin

+0

它不是PHP或正在發送的正常表單。 JQuery序列化表單,然後通過Ajax名稱字符串發送,就像 –

回答

1

您所追求的功能是parse_str。有一個例子如何使用您的JSON使用它:

$str = '[ 
    {"name":"Data[index1][0][index2][0][]","value":"test"}, 
    {"name":"Data[index1][0][index2][0][]","value":"second value"} 
]'; 

$input = json_decode($str); 
// validate $input here 
// then get the data: 
parse_str(
    implode(
     '&', 
     array_map(
      function($var){ 
       return urlencode($var->name) . '=' . urlencode($var->value); 
      }, 
      $input 
     ) 
    ), 
    $request 
); 

print_r($request); 
+0

太棒了!這是我正在尋找的。成千上萬的感謝! –

0

假設你在說話spe cifically關於jQuery的serialize方法,那麼PHP natviely支持這個; jQuery實現生成一個URL的查詢片段。因此,如果將此附加到GET請求請求URL或發送到POST正文中,那麼數據將以$ _GET ot $ _POST(resp)的形式出現在PHP中。

如果您將數據以更深奧的方式走私到PHP,那麼您可以使用PHP的parse_str()轉換爲數組。

+0

事實上,這是我需要的轉換。這裏是示例http://sandbox.onlinephpfunctions.com/code/5d604f087aab07d48be27969e94dc9656fd90ffd –

+0

https://jsfiddle.net/bgay81q2/1/打開控制檯 –