致命错误:未捕获类型错误:count():参数 #1 ($var) 必须为 Countable|array 类型,在中给出 null

Asg*_*ani 26 php count

在我安装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];
    }
}
Run Code Online (Sandbox Code Playgroud)

mah*_*dam 56

在使用变量之前,必须使用 array() 定义变量。或者

if (is_countable($aa) && count($aa) > 0) :
Run Code Online (Sandbox Code Playgroud)


Sum*_*tel 24

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

count((array)$XYZVariable);
Run Code Online (Sandbox Code Playgroud)

试试这个代码

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];
    }
}
Run Code Online (Sandbox Code Playgroud)


Alo*_*Jha 11

轻松修复..

$ab = is_array($aa) ? count($aa) : 0 ;
Run Code Online (Sandbox Code Playgroud)

谢谢


小智 7

@$size = count($_POST['ca1']); 
Run Code Online (Sandbox Code Playgroud)

在 PHP 8 中是行不通的,你必须这样做

@$size = count((array)$_POST['ca1']); 
Run Code Online (Sandbox Code Playgroud)

并为其余部分执行此操作


小智 7

为了更轻松地更新 PHP8 的代码,我制作了自己的函数

function count_($array) {
    return is_array($array) ? count($array) : 0;
}
Run Code Online (Sandbox Code Playgroud)

然后我将 count($value) 替换为 count_($value)


Sau*_*aud 1

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

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

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

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

Ps:你重写了你的$size变量三次。这是为什么?