Laravel中的array_map函数出现错误:"array_map(): Argument #2 should be an array"。

7

我是laravel的新手。为什么我总是会得到以下错误:

array_map():第二个参数应该是一个数组?

而我正在将参数数组分配给这个方法?

这是我的示例代码:

$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 应该是一个数组,首先将您的数据转换为数组。同时检查传递的变量是否为数组。 - Chetan Ameta
如何在 Laravel 上检查数据类型 @Chetan Ameta - monoy suronoy
使用基本的PHP,您可以使用var_dump函数来分析变量。我认为在您的情况下,$products是一个对象。 - Chetan Ameta
基本上,你想要的结果是什么?你能在问题中再解释一点吗?你想要什么样的输出? - Chetan Ameta
1个回答

9

你应该编写

$results = array_map(function ($prod) {
    return $prod->name;
}, $products->toArray());

由于$products是一个集合而不是一个数组。

如果只想获得产品名称列表,请使用pluck方法。

$results = $products->pluck('name')

在较新版本的Laravel中,您应该使用$products->all();而不是toArray,因为在Eloquent集合的情况下,toArray也会尝试将您的模型转换为数组。 all将只返回您的模型数组。
话虽如此,由于您正在使用集合,因此还可以对其使用map方法,例如(在您的情况下完全等同于使用pluck)。
$products->map(function ($product) {
    return $product->name;
});

echo $products->toArray() ... 对我来说返回为空 @PeterPan666 - monoy suronoy
echo不会显示数组,请尝试使用dd($products->toArray()); - Elie Faës

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接