我想仅从brand
选择 name
$collect
,我该怎么做才能实现这一目标?
电流:
$collect = collect([
0 => [
['name' => 'iPhone 6S', 'brand' => ['name' => 'Apple', 'type' => 'brand', 'id' => 1]],
],
1 => [
['name' => 'Galaxy S7', 'brand' => ['name' => 'Samsung', 'type' => 'brand', 'id' => 2]],
],
]);
预期结果:
$collect = collect([
0 => [
['name' => 'iPhone 6S', 'brand' => ['name' => 'Apple']],
],
1 => [
['name' => 'Galaxy S7', 'brand' => ['name' => 'Samsung']],
],
]);
我尝试使用laravel提供的map()和each()集合,但都没有帮助。
这有效:
$collect->transform(function ($item) {
$itemData = collect($item);
return $itemData->transform(function ($item, $key) {
if($key == 'brand') {
$item = array_only($item, 'name');
}
return $item;
});
});
答案 0 :(得分:1)
foreach ($collect as $key => $row) {
$collect[$key]['brand'] = ['name' => $collect[$key]['brand']['name']];
}
答案 1 :(得分:1)
您可以执行以下操作:
$collect->transform(function ($item) {
return collect($item)->transform(function ($item) {
$item['brand'] = array_only($item['brand'], 'name');
return $item;
})->toArray();
});
希望这有帮助!
答案 2 :(得分:0)
您可以使用Collection
类来执行此类操作,然后您可以使用map
函数:
// Instantiate the collection
$collect = collect($collect);
$transformedArray = $collect->map(function($item) {
unset($item[0]['brand']['type']);
unset($item[0]['brand']['id']);
return $item;
})
或强>
如果您坚持不使用unset
,
$collect->map(function($item) {
$temp = [];
$temp[] = ['name' => $item[0]['name'],
'brand' => ['name' => $item[0]['brand']['name']]
];
return $temp;
})
在这个用例中,map
更合适,因为我们基本上只是重新格式化结构