Codeigniter 3 PHP 7.2 count()函数不起作用

时间:2018-09-21 21:09:23

标签: php

我有此功能

$arr = ($data['rajaongkir']['results']);
for($i=0, $c = count($arr); $i < $c; $i++){
    echo ($data['rajaongkir']['results'][$i]['name']); 
}

它在PHP 5中对我有用,但是在codeigniter 3(PHP 7.2)中出错。 我希望此函数在PHP 7.2中运行良好,请帮助我解决此问题? 谢谢。

1 个答案:

答案 0 :(得分:1)

在升级到PHP 7.2后,您开始从count出现错误的唯一原因是,您要计数的东西是不可数的。

基于循环内的代码,您期望$data['rajaongkir']['results']是一个数组,但是如果现在从count得到一个错误,则不是。

这个东西算作0,因为如果它大于0,则循环将执行,并且当您尝试引用$data['rajaongkir']['results'][$i]时也会看到未定义的索引通知。我认为最有可能在您收到警告的情况下nullcount(null)将返回0,但是as of PHP 7.2会生成警告。

  

count()现在将对传递给array_or_countable参数的无效可计数类型产生警告。

无论如何,

count()都是不必要的。您可以只使用foreach循环,并在迭代之前检查数组是否确实是数组,因为null也是不可迭代的。

if (is_array($arr)) {
    foreach($arr as $result) {
        echo $result['name'];
    }
}

if (is_array($arr)) {检查将阻止该警告,但是您确实需要找出为什么所期望的不是数组的东西 。您应该解决问题而不是掩盖它。根据谷歌对“ rajaongkir”的快速搜索,看起来该数组是来自Web API的已解码JSON响应,如果没有results键,则您的请求可能存在某种问题,即您应该检测并处理您的代码。