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的数组或对象