0

我想发现是否设置了变量。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 表中。我需要帮助的是如何将各种 DeleteFileButtonNNN 元素指定为 $_POST 数组中的数组元素索引,因为引用需要是一个表达式(例如,字符串连接,例如 'DeleteFileButton'.$anInteger.'_x')。但是我不相信 PHP 允许我将 $_POST 数组引用为 $_POST[$someVariable]。

有人可以帮忙吗?先感谢您。

4

5 回答 5

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按照其他海报的建议,但是如果不将其存储在其他地方,就无法提前知道最大输入值。坦率地说,与使用数组相比,它的效率和优雅度都较低。

于 2011-10-05T19:02:52.907 回答
2

将我的答案留在这里,因为它适合该问题,但@cwallenpoole 的答案如果不是问题,则更适合该问题。


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

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

$key = 'DeleteFileButton2_x'
$value = $_POST[$key]
于 2011-10-05T18:59:43.953 回答
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'];
于 2011-10-05T19:02:17.420 回答
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];
?>
于 2011-10-05T19:03:23.853 回答
1

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

于 2011-10-05T19:08:06.563 回答