我有此功能
$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中运行良好,请帮助我解决此问题? 谢谢。
答案 0 :(得分:1)
在升级到PHP 7.2后,您开始从count
出现错误的唯一原因是,您要计数的东西是不可数的。
基于循环内的代码,您期望$data['rajaongkir']['results']
是一个数组,但是如果现在从count
得到一个错误,则不是。
这个东西算作0,因为如果它大于0,则循环将执行,并且当您尝试引用$data['rajaongkir']['results'][$i]
时也会看到未定义的索引通知。我认为最有可能在您收到警告的情况下null
。 count(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
键,则您的请求可能存在某种问题,即您应该检测并处理您的代码。