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 应该是一个数组”的主要内容,如果未能解决你的问题,请参考以下文章

array_map — 为数组的每个元素应用回调函数

array_map — 为数组的每个元素应用回调函数

array_reduce() 与 array_map()

php中array_walk() 和 array_map()两个函数区别

在 Laravel 项目中使用 DB 方法得到 DataTables 错误

Laravel 得到 500 内部服务器错误