(PHP)如何通过表达式引用$ _POST []数组中的元素?

时间:2011-10-05 18:56:12

标签: php isset

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

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

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

有人可以帮忙吗?提前谢谢。

5 个答案:

答案 0 :(得分:4)

嗯......不。改为使用数组访问:

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

如果上面检查了第一个和第三个项目,那么当您遍历$_POST['deleteFileButton']时,您将获得0和2的值而不是1的值。

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

如果您愿意,可以将其更改为关联数组(例如deleteFileButton[myKey]),您可以设置输入的值,以便$ val具有一些有意义的值。


如果您觉得<key>_<index>是唯一选项,那么您可以像其他海报建议的那样使用issetarray_key_exists,但无法知道最大输入值提前将其存放在其他地方。坦率地说,与使用阵列相比,它效率更低,更不优雅。

答案 1 :(得分:2)

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


如果我正确理解您的问题,您可以使用array_key_exists($key, $_POST) $ _POST。

并且您还可以访问指定另一个变量作为$ _POST的键,只要它返回正确的值即可。 e.g:

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

答案 2 :(得分: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'];

答案 3 :(得分: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];
?>

答案 4 :(得分:1)

首先我会说php允许你引用$ _POST数组作为$ _POST [$ someVariable]。一个简单的实现方法是使用隐藏的输入字段并在提交表单之前使用javascript将隐藏字段的值替换为图像id,并在php页面中将此隐藏输入作为将在其上执行操作的图像的id这将保存许多if-else结构