2017-02-21 62 views
0

我想請選擇brandname只有$collect我該怎麼做才能做到這一點?只在Laravel摘下兒童的子女

電流:

$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提供的每個()集合,但他們沒有幫助。

EDIT(ROSS)

這工作:

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

回頭吧,是吧?大聲笑我可以問,爲什麼你需要選擇某些數據?下拉菜單? –

+0

@MikeBarwick現在這個問題是不同的。這不是下拉菜單,但我試圖不通過我的API公開數據。 – Coder

+0

在這種情況下,只是'foreach'。這是最安全,最乾淨和可讀的代碼。 –

回答

1

你可以這樣做:

$collect->transform(function ($item) { 
    return collect($item)->transform(function ($item) { 
     $item['brand'] = array_only($item['brand'], 'name'); 
     return $item; 
    })->toArray(); 
}); 

希望這會有所幫助!

+0

看起來是不錯的代碼,我得到這個錯誤:'array_intersect_key():參數#1不是數組' – Coder

+0

試圖調試它,變換中的$ item的值爲1沒有別的... – Coder

+0

@PHPLover您使用的是什麼版本的Laravel? –

1
foreach ($collect as $key => $row) { 
    $collect[$key]['brand'] = ['name' => $collect[$key]['brand']['name']]; 
} 
+0

剛剛更新了問題。 – Coder

+0

你是什麼意思的「選擇」? – klepzers

+0

按預期工作,謝謝。你知道使用laravel的地圖集合來轉換這種方式嗎? – Coder

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是比較合適的,因爲我們基本上只是重新格式化結構

+0

我需要找到一種方法來選擇不刪除,因爲新的字段可能會出現,我的列將被暴露,這是不是futureproof。 – Coder

+0

@PHPLover系列不會更改原始數據。你可以嘗試檢查'$ collect'的值應該仍然是舊的 – geckob

+0

更新爲你的問題 – geckob