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

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

7 回閲覧されました

みなさんこんにちは、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
]