laravel array_map 得到错误“array_map(): 参数 #2 应该是一个数组”
Posted
技术标签:
【中文标题】laravel array_map 得到错误“array_map(): 参数 #2 应该是一个数组”【英文标题】:laravel array_map get error "array_map(): Argument #2 should be an array" 【发布时间】:2016-02-09 21:14:33 【问题描述】:我是 laravel 的新手。为什么我总是出错:
array_map(): 参数 #2 应该是一个数组?
而我在这个方法上分配参数数组?
这是我的示例代码:
$products = Category::find(1)->products;
注意: 1个类别有很多产品
这是来自查询的数组:
[
"id": "1",
"name": "action figure",
"created_at": "2015-11-09 05:51:25",
"updated_at": "2015-11-09 05:51:25"
,
"id": "2",
"name": "manga",
"created_at": "2015-11-09 05:51:25",
"updated_at": "2015-11-09 05:51:25"
]
当我尝试以下代码时:
$results = array_map( function($prod)
return $prod.name;
, $products);
我得到如下错误:
"array_map(): 参数 #2 应该是一个数组"
【问题讨论】:
根据错误$products
应该是一个数组,首先将你的数据转换成一个数组。还要检查传递的变量是否为数组
如何在 laravel @Chetan Ameta 上检查类型数据
用基本的php,可以var_dump
变量来分析变量。我认为在你的情况下$products
是一个对象
基本上你想要的结果是什么?你能在你的问题中解释更多吗?你想要什么输出?
【参考方案1】:
你应该写
$results = array_map(function ($prod)
return $prod->name;
, $products->toArray());
因为$products
是一个集合而不是一个数组。
如果您只想获得产品名称列表,请使用pluck
方法
$results = $products->pluck('name')
在较新版本的 Laravel 中,您应该使用 $products->all();
而不是 toArray
,因为在 Eloquent 集合的情况下,toArray
也会尝试将您的模型转换为数组。 all
将按原样返回模型数组。
话虽如此,既然您在 Collection 上,您也可以像这样使用 map
方法(这与在您的情况下使用 pluck
完全相同)
$products->map(function ($product)
return $product->name;
);
【讨论】:
echo $products->toArray() ...为我返回空@PeterPan666 echo 不显示数组,试试dd($products->toArray());
以上是关于laravel array_map 得到错误“array_map(): 参数 #2 应该是一个数组”的主要内容,如果未能解决你的问题,请参考以下文章
php中array_walk() 和 array_map()两个函数区别