count():参数必须是数组或对象,根据数组大小实现Countable error

Posted

技术标签:

【中文标题】count():参数必须是数组或对象,根据数组大小实现Countable error【英文标题】:count(): Parameter must be an array or an object that im plements Countable error based on the array size 【发布时间】:2019-11-08 19:55:23 【问题描述】:

只有在返回的数组太长时才会在下面的代码中产生这个错误。使用短数组(我不知道具体有多少)不会发生。

$phone_numbers = array();
if(!empty($_POST['phone_numbers']))
    $phone_numbers = json_decode($_POST['phone_numbers']);
    $phone_numbers_var = str_repeat('?,', count(json_decode($_POST['phone_numbers'])) - 1) . '?'; // <-- error line

count()参数有限制吗?

【问题讨论】:

这是一个 php 问题吗? 为什么不在$phone_numbers 上使用count 而不是json_decode 两次?不,count没有限制 @dWinder 两种方法都试过了,错误依旧 除非它是双重编码的,否则无论数组大小如何,第二次解码都将返回 null。 count(): Parameter must be an array or an object that implements Countable的可能重复 【参考方案1】:

首先检查你 $_POST['phone_numbers'] 得到了什么

记住:

var_dump(count(null));var_dump(count(false));

将输出:

Warning: count(): Parameter must be an array or an object that implements Countable in

我认为 PHP 7.2 版的计数有点奇怪......但你可以尝试这样的事情:

https://wiki.php.net/rfc/counting_non_countables

编辑:

仅供评论:

$POST['phone_numbers'] = [165567, 545675, 655666];

如果你尝试这样做:

json_decode($POST['phone_numbers']);

将返回:

WARNING json_decode() expects parameter 1 to be string, array given on line number 4

还有数......你知道..就这样做:

count($POST['phone_numbers']);

【讨论】:

$phone_numbers 返回 [165567, 545675, 655666, ..., n] @afazolo 所以在他身上加上count 而不是在POST 的解码上 由于返回数据的完整性,出现此问题。谢谢你的帮助。【参考方案2】:

很有趣,但似乎如果数组中有一些以 0 开头的数字,则会发生错误。当我删除初始 0 时就可以了。

 $phone_numbers = [011364346387, 33334444, ..., n] //error
 $phone_numbers = [11364346387, 33334444, ..., n] //is ok!

【讨论】:

以上是关于count():参数必须是数组或对象,根据数组大小实现Countable error的主要内容,如果未能解决你的问题,请参考以下文章

laravel : count(): 参数必须是数组或实现 Countable 的对象

消息:count():参数必须是数组或实现 Countable 的对象

MYBB 警告 [2] count():参数必须是数组或实现 Countable 的对象 - 行:906

PHP错误:警告:count():参数必须是实现Countable的数组或对象

PHP警告消息:count():参数必须是实现Countable的数组或对象[重复]

警告:count():参数必须是一个实现Countable的数组或对象(在数组中是多维的)