2017-09-07 5 views
0

Laravelコレクションのいくつかのキーを配列に格納されている他のものにマップしたいと考えています。ララベルコレクション。 1つのキーを他にマップする

私はそのような変換のための適切できれいで短いパイプラインを「発明」できません。ここで

は、私が何をしたいの単純化した例です。

$mappedKeys = [ 
    '1' => 'One', 
    '2' => 'Two', 
    '3' => 'Three', 
    '4' => 'Four', 
]; 

$data = collect([ 
    '1' => 'I', 
    '2' => 'II', 
    '3' => 'III', 
    '5' => 'V', 
]); 

$resultCollection = $data->... 

/* 
* I want to receive after some manipulations 
* 
* [ 
*  'One' => 'I', 
*  'Two' => 'II', 
*  'Three' => 'III', 
*  '5'  => 'V', 
* ] 
*/ 

答えて

2

$mappedKeys = [ 
    '1' => 'One', 
    '2' => 'Two', 
    '3' => 'Three', 
    '4' => 'Four', 
]; 

$data = collect([ 
    '1' => 'I', 
    '2' => 'II', 
    '3' => 'III', 
    '5' => 'V', 
]); 

$resultCollection = $data->keyBy(function ($item, $key) use ($mappedKeys) { 
    return isset($mappedKeys[$key]) ? $mappedKeys[$key] : $key; 
}); 

希望これは、助けて!

+0

ありがとうございますが、私はあまり単純化していないようです。私は単純なものではなく連想配列を持っています。私は例を更新しました。あなたはそれを手伝ってもらえますか? –

+0

ありがとう)以前はkeyByを使用しておらず、あなたのソリューションはきれいでかなりかわいいです。 –

1

更新回答あなたは常にコレクションにcombine()メソッドを使用することができ

$resultCollection = $data->combine($mappedKeys); 
+0

ありがとうございます。私は答えを更新したので、あなたのソリューションは古くなっていますが、最初は間違いありませんでした。私はあなたがそれを更新する場合+1を追加する準備ができています:) –

+0

@ D.R私は答えを更新しました.. :) –

+0

申し訳ありませんが、あなたの解決策は動作しません。私はそれを試した。私はあなたがPHPであなたのソリューションを書き換えると思ったので、それはコレクションを使用しないが、同様の問題を抱えている他の人のために役立つ可能性があります。 –

関連する問題