PHP警告:count():参数必须是实现Countable的数组还是对象?

时间:2019-06-03 05:07:59

标签: php arrays wordpress

在我的网站上,我允许人们上传图库。当他们单击图像时,在底部有一个下一个上一个按钮,因此他们可以轻松地在图像中来回滚动。

我在/ opt / cpanel / ea-php72 / root / usr / var / log / php-fpm /

的日志中收到以下错误
public void updateFileWithFilename(String id, String name) {
        fileManagementRepository.updateFile(Long.parseLong(id), name);
    }
public boolean createFileWithFilename(String name, String filename, String createdBy, Date createdDate, boolean isActive, boolean isDeleted) {
        fileManagementRepository.createFileWithFilename(name, filename, createdBy, createdDate, isActive, isDeleted);
        return true;
    }

它正在谈论我的代码中的以下行:

NOTICE: PHP message: PHP Warning:  count(): Parameter must be an array or an object that implements Countable in . . . on line 12

下面是该行随附的其他代码:

$max = count($photos);

基本上,此代码使用 get_field('gallery')获取图库中的照片总数,并将编号分配给变量 max

其余代码是 next previous 按钮的工作方式。

我不知道怎么了。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

通常,解决方案很简单:

第一个带有var_dump()返回$photos的调试。比你会知道是什么问题。

count()接受数组,如果您有falsenull或其他任何内容,则会出错。

只需执行以下操作:

$photos = get_field('gallery');
if(!is_array($photos) || empty($photos)) $photos = array(); // FIX ERROR!!!
$max = count($photos);    <------- error line here -------->
$current = (isset($_GET['image']) && !empty($_GET['image']) && is_numeric($_GET['image'])) ? intval($_GET['image']) : 0;
if ($current > 0) {
    if ($current > $max) $current = $max;
    if ($current < 1) $current = 1;
}

$next = (($current + 1) < $max) ? ($current + 1) : $max;
$prev = (($current - 1) > 1) ? ($current - 1) : 1;
?>

if(!is_array($photos) || empty($photos)) $photos = array();之前使用$max = count($photos);,您可以解决问题,所有非数组或空(0,NULL,FALSE,'')的内容都将得到修复,并且计数{{1 }}的结果为$max,因为数组为空。


重要!

您不应该这样工作。您需要知道在变量中收到和期望得到哪些信息。代码必须保持干净,更正此类错误是一种不好的做法。如果收到一个数组,则该数组是预期的,并且在进行任何计算之前必须先进行检查。


更新:

您也有错误

0

我将其修复为:

$current = (isset($_GET['image'])) ? intval($_GET['image']) : false;
if ($current !== false)

这样做的原因是,您在下面进行了计算,而您并不期望$current = (isset($_GET['image']) && !empty($_GET['image']) && is_numeric($_GET['image'])) ? intval($_GET['image']) : 0; if ($current > 0) 会很好。 (false + 1)可以翻译为false,但在您的情况下,您也会遇到错误。在这种情况下,我将0替换为false,添加了0empty()检查,那里没有错误。