Laravelでコレクションを整形するメソッド

Laravelでコレクションを整形するメソッド

143 回閲覧されました

みなさんこんにちは、jonioです。

今回はコレクションを整形するメソッドでよく使う物のメモになります。

おすすめ参考書

基礎力を上げるのに一番おすすめです。

今回登場するメソッド

下記になります。

  • map
  • mapWithKeys
  • flatten
  • flatMap

map

連想配列の要素を整形します。

下記のコードで考えます。

$people = collect([
    ['name' => 'jonio', 'age' => 44],
    ['name' => 'takuya', 'age' => 28]
]);

$peopleChanges = $people->map(function ($person) {
    return [
        'name' => strtoupper($person['name']),
        'age' => $person['age'] * 2
    ];
});

出力結果は下記になります。

dd($peopleChanges->all());


//出力結果
array:2 [▼ 
  0 => array:2 [▼
    "name" => "JONIO"
    "age" => 88
  ]
  1 => array:2 [▼
    "name" => "TAKUYA"
    "age" => 56
  ]
]

mapWithKeys

各要素の連想配列のvalueを使って新しい連想配列の要素に作り変えます。

下記のコードで考えます。

$people = collect([
    ['name' => 'jonio', 'age' => 44],
    ['name' => 'takuya', 'age' => 28]
]);

$newArray = $people->mapWithKeys(function ($person) {
    return [$person['name'] => $person['age']];
});

出力結果は下記になります。

dd($keyedData->all());

//出力結果:
array:2 [▼ 
  "jonio" => 44
  "takuya" => 28
]


flatten

多次元の配列がある場合1次元の配列に変換します。

下記のコードで考えます。

$nestArray = collect([
    ['jonio', 'takuya', 'colors' => ['orange', 'black', 'white']],
    ['PHP', 'Laravel', 'JavaScript'],
    [30, 25, 30],
]);

$oneDimensionArray = $nestArray->flatten();

出力結果は下記になります。

dd($oneDimensionArray->all());

// 出力結果:
array:11 [▼ 
  0 => "jonio"
  1 => "takuya"
  2 => "orange"
  3 => "black"
  4 => "white"
  5 => "PHP"
  6 => "Laravel"
  7 => "JavaScript"
  8 => 30
  9 => 25
  10 => 30
]

flatMap

連想配列の要素を整形してvalueを使った1次元の配列に変換します。

$people = collect([
    ['name' => 'jonio', 'age' => 44],
    ['name' => 'takuya', 'age' => 28],
]);

$oneDimensionPeople = $people->flatMap(function ($person) {
    return [$person['name'], $person['age'] * 2];
});

出力結果は下記になります。

dd($flatPeople->all());

//出力結果: 
array:4 [▼
  0 => "jonio"
  1 => 88
  2 => "takuya"
  3 => 56
]