Laravel Blade中pluck返回集合而非数组导致in_array报错求助
解决Laravel Blade中in_array()参数类型错误的问题
嘿,这个问题我之前踩过一模一样的坑!其实原因特别明确:你用$pug->ipbans->pluck('ip')拿到的不是原生PHP数组,而是Laravel Collection对象——虽然直接输出它的时候,会显示成["127.0.0.1","127.0.0.1"]这种类似数组的JSON格式,但本质上它是个对象,所以in_array()才会报参数类型错误。
给你两种靠谱的解决办法:
方法一:用Collection自带的
contains()方法(推荐)
Laravel集合本身就提供了判断元素是否存在的方法,完全不用转数组,代码更简洁优雅,也是Laravel的最佳实践:$pug->ipbans->pluck('ip')->contains(Request::ip())方法二:把集合转成原生数组
如果你一定要用in_array(),可以调用集合的toArray()方法,把它转换成PHP原生数组:in_array(Request::ip(), $pug->ipbans->pluck('ip')->toArray())这样第二个参数就符合
in_array()的要求了,不会再触发错误。
顺便补个小知识点:集合对象之所以输出看起来像数组,是因为它实现了__toString()魔术方法,会自动转成JSON字符串,但实际类型还是Collection,这点要注意区分哦!
内容的提问来源于stack exchange,提问作者Kenneth Poulsen
相关产品推荐
相关产品推荐

