【问题标题】:(PHP) How to reference an element in $_POST[] array by way of an expression?(PHP) 如何通过表达式引用 $_POST[] 数组中的元素?
【发布时间】:2011-10-05 18:56:12
【问题描述】:

我想知道是否设置了变量。 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'.$一个整数。'_x')。但是我不相信 PHP 允许我将 $_POST 数组引用为 $_POST[$someVariable]。

有人可以帮我吗?提前谢谢你。

【问题讨论】:

  • 非常感谢您提供这些信息丰富且富有创意的回复!

标签: php isset


【解决方案1】:

嗯...不要。改用数组访问:

 <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 具有一些有意义的值。


如果您认为&lt;key&gt;_&lt;index&gt; 是您唯一的选择,那么您可以使用issetarray_key_exists,正如其他发帖人所建议的那样,但是如果不存储它就无法提前知道最大输入值别的地方。坦率地说,与使用数组相比,它的效率和优雅度都较低。

【讨论】:

    【解决方案2】:

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


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

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

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

    【讨论】:

      【解决方案3】:

      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'];
      

      【讨论】:

      • Marc B 的回答简洁地证明了我假设 PHP 不支持对 $_POST(或任何其他)数组的非文字引用的错误。感谢那。还要感谢其他回答者,他们的回答让我深入了解了许多对我有用的数组处理函数!
      【解决方案4】:
      <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];
      ?>
      

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-09-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多