PHP 7.2 count()警告

时间:2017-12-21 15:50:40

标签: php

$lts = mysqli_fetch_all($con->query($query), MYSQLI_NUM);
for($i=0; $i<count($lts); $i++){
    for($j=0; $j<count($lts[$i]); $j++){
        $lts[$i]=$lts[$i][$j];
    }
}

这是$ lts var_dump:

array (size=2)
  0 => string '20' (length=2)
  1 => string '21' (length=2)

给我这个警告

  

参数必须是实现Countable

的数组或对象

从PHP7.1升级到7.2时就发生了这种情况。知道怎么解决吗?

3 个答案:

答案 0 :(得分:1)

问题是,第一次通过内部循环,您将$lts[$i]替换为$lts[$i][$j]。当循环重复时,它会测试$j < count($lts[$i])。但$lts[$i]不再是数组,而是行第一列的值,因此您会收到此错误。

您可以通过在循环之前将count($lts[$i])分配给变量来解决此问题。但这只会引发另一个问题。当您在后续迭代中尝试$lts[$i] = $lts[$i][$j]时,$lts[$i]仍然不是数组,因此没有$j元素。

您可以使用foreach代替for来解决这个问题,因为它会复制它循环的数组。

for($i=0; $i<count($lts); $i++){
    foreach ($lts[$i] as $col)
        $lts[$i] = $col;
    }
}

但目前尚不清楚内循环的意义。每次迭代都会用下一列覆盖$lts[$i],因此最终结果将只是最后一列。你可以在没有内循环的情况下做到这一点。

foreach ($lts as &$row) {
    $row = end($row);
}

或简单地说:

$lts = array_map('end', $lts);

答案 1 :(得分:1)

Wordpress 4.9.8主题安装(php 7.2 count()警告):

  

警告:count():参数必须是数组或对象,   实现Countable in   /var/www/html/wp-content/themes/office/admin/functions/functions.mediauploader.php   在第127行

解决方案;

第127行已更改...

if ( count( $_posts ) ) {

  

if(is_array($ _posts)){

答案 2 :(得分:-1)

创建一个新函数来替换计数

function count2($x) {
    return is_array($x) ? count($x) : 0;
}