只在Laravel采取儿童的孩子

时间:2017-02-21 14:31:10

标签: php laravel eloquent

我想仅从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()集合,但都没有帮助。

编辑(ROSS)

这有效:

  $collect->transform(function ($item) {
    $itemData = collect($item);
      return $itemData->transform(function ($item, $key) {
        if($key == 'brand') {
          $item = array_only($item, 'name');
        }
        return $item;
      });
  });

3 个答案:

答案 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更合适,因为我们基本上只是重新格式化结构