【问题标题】:php - check if $_POST is array?php - 检查 $_POST 是否为数组?
【发布时间】:2011-08-01 10:18:30
【问题描述】:

我知道这可能是一个愚蠢的问题,但我遇到了一个 php 代码的 sn-p,它在执行其他功能之前检查 $_POST is_array() 是否。

现在我猜 $_POST 是否应该始终是关联数组?真的需要这个检查吗?为什么?

【问题讨论】:

  • 并非总是如此。我个人在 $_POST、$_GET 和 Co 周围使用对象包装器。它们仍然作为数组工作,但它们是 ArrayObjects 并且会通过简单的is_array() 检查失败。但这是一个非常特殊的情况。通常不用担心。

标签: php arrays global


【解决方案1】:

正如已经多次提到的,$_POST 是一个超全局变量,它总是被定义并且总是一个数组(除非被覆盖)。

如果您尝试测试是否已发布某些内容,则可以使用以下内容:

if (count($_POST)) {
    // something has been submitted
}

要回答主要问题,不,不需要is_array 检查。

【讨论】:

    【解决方案2】:

    正如许多人已经说过的那样,它始终是一个数组。

    我认为目的可能是检查一个空数组。 !empty($_POST) 应该没问题。

    也许编码员有一些部分将数组更改为字符串(如果你问我是愚蠢的)并且想要进行检查,否则如果该语句首先出现,那么它是不必要的

    【讨论】:

      【解决方案3】:
      • $_POST 是一个超全局变量,并且总是被定义(总是存在)并且总是一个数组
      • 这是真的,即使它不包含任何元素
      • 但是,如果不建议并且我从未见过它,也可以覆盖或取消设置它
      • $_POST 数组不需要 isset() 和 is_array(),但 $_POST 数组中的元素经常需要它们

      【讨论】:

      • 感谢您的回复,我想为您的答案投票,因为它很详细,虽然我觉得要检查 zerkms 之一,因为它说的是我想要的;我已经知道所有其他细节。
      【解决方案4】:

      $_POST 始终是一个数组,他们可能会检查某个 $_POST 值是否是一个数组。

      <input name="test" />$_POST['test'] 不是数组

      <input name="test[]" /> $_POST['test'] 一个数组

      【讨论】:

        【解决方案5】:

        $_POST 总是被定义为一个数组,即使它不包含任何键/值对。

        【讨论】:

          【解决方案6】:

          PHP 确保 $_POST 始终是一个数组,除非您在代码中的某处以某种方式取消设置或覆盖 $_POST,否则您不需要进行该检查。

          【讨论】:

            【解决方案7】:

            那个检查是不必要的。 $_POST 是一个始终定义的superglobal 数组。您应该使用isset检查特定元素

            【讨论】:

              【解决方案8】:

              如果它没有以某种方式更改,例如

              $_POST = 'not array';
              

              那么它是数组;-)

              【讨论】:

              • 没错。除非另有明确声明 $_POST 超全局总是一个数组。
              • 好的,但是,它只能由编码器更改,或者它也可以由表单提交者设置为字符串?这可能是一个安全问题吗?
              • @Julie Rokk:如果它没有由开发人员明确更改,正如我回答的那样 - 它始终是一个数组。无法在外面更改。
              猜你喜欢
              • 1970-01-01
              • 2011-07-31
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多