2016-09-22 48 views
-1

看我有一個這樣的形式:如何使用字符串在PHP中獲取關聯HTML數組的值?

<form method="post"> 
    <input name="variable[var1][var2]" value="44"/> 
</form> 

我想用像繩子來獲得在PHP的variable[var1][var2]值:

$str = "['variable']['var1']['var2']"; 
echo "{$_POST{$str}}"; 

爲什麼我需要做的是什麼?

我需要它,因爲獲取該值的代碼是完全動態的,我無法使用$_POST['variable']['var1']['var2']手動獲取或設置值。

你能幫忙嗎?

備註:我知道這是可以得到它使用$_POST['variable']['var1']['var2'],請不要問我爲什麼我不使用這種方式。簡單地說,我需要使用上述(使用$str)。

+0

解析您的字符串並從中獲取密鑰。 –

+1

'$ str =「variable.var1.var2」;'或類似的工作? – AbraCadaver

+0

我該如何在PHP中做到這一點? –

回答

0

你總是想要超越它。任何你在[]中放入表單字段名稱的數組符號都將成爲一個數組鍵。以下是從字面上你所需要的:

<input name="foo[bar][baz][qux]" ... /> 

$val = $_POST['foo']['bar']['baz']['qux']; 

不能使用字符串作爲「地址」入陣,沒有瘋狂的醜陋黑客像eval,或解析字符串,做一個循環來挖入陣。

+0

我需要這種解析方法,你能告訴我嗎? –

-1

很難相信這是一個要求。如果你可以擴大你想要達到的目標,那麼毫無疑問,有人會有更好的解決方案。但是,我會忽略eval = evil仇敵。

爲了呼應:

eval("echo \$_POST$str;"); 

要分配給一個變量:

eval("\$result = \$_POST$str;"); 

如果你打開另一語法,然後檢查How to write getter/setter to access multi-level array by key names?

2

您可以使用preg_match_all()讓所有的將字符串中的索引轉換爲數組:

$indexes = preg_match_all('/(?<=\[\')(?:[^\']*)(?=\'\])/', $str); 
$indexes = $indexes[0]; // Get just the whole matches 

然後使用循環鑽入$_POST

$cur = $_POST; 
foreach ($indexes as $index) { 
    $cur = $cur[$index]; 
} 

此時$cur將包含您想要的值。

+0

'警告:preg_match_all():編譯失敗:(<?在第7行C:\ xampp \ htdocs \ dermaquality \ test.php中的偏移3處無法識別的字符' –

+0

對不起,應該是'$ <=' – Barmar

相關問題