【问题标题】:Fatal error: Uncaught TypeError: count(): Argument #1 ($var) must be of type Countable|array, null given in致命错误:未捕获的类型错误:count():参数 #1 ($var) 必须是 Countable|array 类型,在
【发布时间】:2021-06-14 16:24:40
【问题描述】:

在我安装 XAMPP 8 (PHP 8) 之前,代码一直运行良好。

if(isset($_POST["submit"])){
    @$subject = $_POST['subject'];
    @$term = $_POST['term'];
    @$session = $_POST['session'];
    @$size = count($_POST['adm_num']);
    @$size = count($_POST['ca1']);
    @$size = count($_POST['ca2']);
    @$size = count($_POST['ca3']);

    $i = 0;
    while ($i < $size) {
        $ca1= $_POST['ca1'][$i];
        $ca2= $_POST['ca2'][$i];
        $ca3= $_POST['ca3'][$i];
        $adm_num = $_POST['adm_num'][$i];
    }
}

【问题讨论】:

  • 你在非数组上使用count()
  • 避免使用@ 运算符。请与isset()empty() 联系。
  • 旁注:定义$size然后覆盖它3次有什么意义?

标签: php count


【解决方案1】:

引用count() 的官方 php 文档:

计算数组中的所有元素,或对象中的某些元素。

您遇到的错误非常明显。这四个变量之一($_POST['adm_num']$_POST['ca1']$_POST['ca2']$_POST['ca3'])不是数组或更多。

您可以使用gettype() 了解变量的类型。它会告诉你哪个变量不包含数组。您可以将其更改为array

P.s:您将覆盖您的 $size 变量三次。这是为什么呢?

【讨论】:

    【解决方案2】:

    在文档中它说:

    返回值 返回 value 中元素的数量。当参数既不是数组也不是实现了 Countable 接口的对象时,返回 1。有一个例外,如果值为null,则返回0。

    它看起来像一个错误?!?

    【讨论】:

    • 这不适用于 PHP 8。
    【解决方案3】:

    PHP8.0 上强制类型在 Count 上定义。

    count((array)$XYZVariable);
    

    试试这个代码

    if(isset($_POST["submit"])){
        @$subject = $_POST['subject'];
        @$term = $_POST['term'];
        @$session = $_POST['session'];
        @$size = count((array)$_POST['adm_num']));
        @$size = count((array)$_POST['ca1']));
        @$size = count((array)$_POST['ca2']));
        @$size = count((array)$_POST['ca3']));
    
        $i = 0;
        while ($i < $size) {
            $ca1= $_POST['ca1'][$i];
            $ca2= $_POST['ca2'][$i];
            $ca3= $_POST['ca3'][$i];
            $adm_num = $_POST['adm_num'][$i];
        }
    }
    

    【讨论】:

      【解决方案4】:

      您必须在使用前用 array() 定义变量。 或

      if (is_countable($aa) && count($aa) > 0) :
      

      【讨论】:

        【解决方案5】:

        轻松修复..

        $aa = is_array($aa) ? count($aa) : 0 ;
        

        谢谢

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-09-27
          • 2021-11-27
          • 1970-01-01
          • 1970-01-01
          • 2023-01-10
          • 2023-03-30
          • 2019-11-09
          • 2021-07-08
          相关资源
          最近更新 更多