2011-10-05 66 views
0

我想发现是否设置了变量。 PHP的isset()函数(即isset($ myVariable)通常会给我提供变量的设置状态,但是我想引用该变量作为表达式。是否有可能?如果是这样,怎么办?

有点更多的上下文和细节:我在HTML表单中有几个图像提交按钮,每个按钮都被命名为'DeleteFileButtonNNN',其中NNN是一个整数(实际上是一个文件ID号)。当用户点击与NNN = 2相关联的按钮时,表单被提交并且$ _POST ['DeleteFileButton2_x']被设置(而$ _POST ['DeleteFileButton1_x'和$ _POST ['DeleteFileButton3_x']将不会被设置)。我希望能够循环遍历$ _POST数组发现点击了哪个按钮

我可以通过一段时间轻松地创建循环本身的边界o由于所有可能的文件ID(即, NNN值)存储在MySQL表中。我需要帮助的是如何指定各种DeleteFileButtonNNN元素作为$ _POST数组中的数组元素索引,因为引用需要是一个表达式(例如,像'DeleteFileButton'这样的字符串连接。$ anInteger。'_ x' )。但我不相信PHP允许我将$ _POST数组作为$ _POST [$ someVariable]引用。

有人能帮我吗?先谢谢你。

+0

千万,感谢您提供的这些丰富而有创意的答案! –

回答

1

PHP允许你使用任何转予下降到一个整数或字符串来引用数组,这样你就可以最肯定做:

function x() { 
    return "a"; 
} 

$x = 'a'; 

$val = $_POST[x()]; 
$val = $_POST[$x]; 
$val = $_POST['a']; 
$val = $_POST[chr(ord('a'))]; 

“复合”键允许作为井:

$_POST["someprefixstring_$x"]; // exactly the same as $_POST['someprefixstring_a']; 
+0

Marc B的答案在假设PHP不支持对$ _POST(或任何其他)数组的非文字引用的情况下巧妙地证明了我的错误。感谢那。还要感谢其他受访者,他们的回答让我深入了解许多对我有用的数组处理函数! –

2

在这里留下我的答案,因为这是适当的问题,但@ cwallenpoole的答案是更好的问题,如果不是问题。


你可以使用array_key_exists($key, $_POST)为$ _ POST,如果我正确地理解你的问题。

而且,只要返回正确的值,您也可以访问指定另一个变量作为$ _POST的键。例如:

$key = 'DeleteFileButton2_x' 
$value = $_POST[$key] 
4

呃......不要。改用数组访问:0而不是1

foreach($_POST['deleteFileButton'] as $key => $val) 
     print "$key was clicked." 

如果

<input type="checkbox" name="deleteFileButton[0]" /> 
<input type="checkbox" name="deleteFileButton[1]" /> 
<input type="checkbox" name="deleteFileButton[2]" /> 

如果第一项和第三项是上述检查,那么当你通过迭代$_POST['deleteFileButton']你会得到值2和你可以将它更改为关联数组(例如,deleteFileButton[myKey]),并且可以设置输入值以便$ val具有一些有意义的值。


如果你觉得<key>_<index>是你唯一的选择,那么你可以使用issetarray_key_exists其他海报建议,但不会有提前知道了最大输入值不存储在别处的一种方式。坦率地说,它比使用数组效率低,不够优雅。

1
<input name="asd[]" value="a"> 
<input name="asd[]" value="b"> 
<input name="asd[]" value="c"> 
<input name="asd[]" value="d"> 

<?php 
foreach($_POST['asd'] as $key => $value) 
    echo $_POST['asd'][$key]; 
?> 
1

首先,我会说php允许你引用$ _POST数组作为$ _POST [$ someVariable]。一个简单的实现将使用一个隐藏的输入字段和使用JavaScript之前提交表单来替换隐藏字段的值与图像ID,并在您的PHP页面获取这个隐藏的输入作为将在其上进行操作的图像的ID这将节省许多if-else结构

相关问题