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

问题描述 投票:0回答:7

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

$size = count($_POST['adm_num']);

但现在它抛出“参数 #1 ($var) 必须是 Countable|array 类型,给定 null”错误。

php count
7个回答
61
投票

如果数组可能不存在,您可以在计数之前检查其存在和类型,然后设置默认值或返回错误(如果需要数组)

if (isset($_POST['adm_num']) && is_countable($aa)) {
    $size = count($_POST['adm_num']);
} else {
    $size = 0;
    // http_response_code(400);
    // die("adm_num must be present and be of type array");
}

如果此时必须定义数组,则此错误意味着您的代码中出现了某些问题,您必须对其进行调试,检查该数组的源。


26
投票

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

12
投票

轻松修复..

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

谢谢


9
投票
@$size = count($_POST['ca1']); 

在 PHP 8 中不起作用,你必须这样做

@$size = count((array)$_POST['ca1']); 

其余部分也这样做


7
投票

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

function count_($array) {
    return is_array($array) ? count($array) : 0;
}

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


1
投票

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

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

您遇到的错误非常明显。这四个变量之一(

$_POST['adm_num']
$_POST['ca1']
$_POST['ca2']
$_POST['ca3']
)不是数组,也可能不是数组。

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

array

P.s:您将覆盖

$size
变量三次。这是为什么?


-5
投票

在文档中说:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.