.Dev.Record

#6237e7b4e8fa0

【Laravel】へルパ関数の紹介 配列編2【Arr::first、Arr::flatten、Arr::forget】

2022.03.21

test

前回に引き続き本記事でもLaravelの配列関連のへルパ関数を解説していきたいと思います。

参考になれば幸いです。

Memo

Laravelのバージョンは8系統になります。

今回解説するへルパ関数は以下です。

本記事で取り扱うへルパ関数

  • Arr::first(配列内で条件に一致した最初の要素を取得)
  • Arr::flatten(多次元配列を一次元配列に変換)
  • Arr::forget(ドット記法で指定したキーの値を削除)

Arr::first 配列内で条件に一致した最初の要素を取得

配列内で条件に一致した最初の要素を取得します。

Arr::first

Arr::first(配列, 要素を検証するコールバック関数(値, キー), (オプション)条件に一致する要素がなかった場合に返す値)

  • 第二引数のコールバック関数内に要素を判定する条件を記載します。
  • コールバック関数は配列の要素毎に実行され、最初にtrueが返った要素が返り値となります。
  • コールバック関数は検証する配列の各要素の値とキーを引数に取れます。(第一引数に値、第二引数にキー
  • 第三引数はオプションで指定すると、条件に一致する要素が存在しない場合に返されるデフォルト値として扱われます。
  • コレクションも可

使用例

1$array = ['key-1' => 1, 'key-2' => 2];
2dd(Arr::first($array, function($value, $key) {
3    return $value === 2 && $key === 'key-2'; // 条件文
4}));
5
6// 結果
72

上記の例では、第二引数のコールバック関数内でキーがkey-2でかつ値が2という条件を指定しています。

以下はサンプルのコールバック関数の実行イメージになります。

実行例のイメージ

1$array = ['key-1' => 1, 'key-2' => 2];
2Arr::first($array, function($value, $key) {
3    // コールバック関数は配列の要素毎に実施される
4    // 一周目に$value = 1, $key = 'key-1'が格納されるので、条件に一致しないので次の要素へ
5    // 二周目に$value = 2, $key = 'key-2'が格納され、これは条件に一致するのでtrue
6    return $value === 2 && $key === 'key-2';
7});

第三引数を指定した場合

1$array   = ['key-1' => 1, 'key-2' => 2];
2$default = 'default value';
3
4dd(Arr::first($array, function ($value, $key) {
5    return $value === 3;
6}, $default));
7
8// 結果(一致する要素がなかった場合に第三引数に指定した値が返される)
9"default value"

Arr::flatten 多次元配列を一次元配列へ変換

多次元配列を一次元配列に変換します。

Arr::flatten

Arr::flatten(変換する配列, 変換する階層の深さ(デフォルトは全て)): array

  • コレクションも可
  • 変換後の配列は添字配列になる
  • 第二引数を指定すると、一次元配列に変換する階層の深さを指定できる

使用例

1$array = ['key-1' => 1, 'key-2' => ['key-2-2' => 2], [3, ['key-3' => 4]]];
2dd(Arr::flatten($array));
3
4// 結果(添字配列の一次元配列に変換される)
5array:4 [6  0 => 1
7  1 => 2
8  2 => 3
9  3 => 4
10]

コレクション使用時

1$collection = Collection::make(['key-1' => 1, 'key-2' => ['key-2-2' => 2], [3, ['key-3' => 4]]]);
2dd(Arr::flatten($collection));
3
4// 結果
5array:4 [6  0 => 1
7  1 => 2
8  2 => 3
9  3 => 4
10]

第二引数では、一次元配列に変換する階層を指定できます。

第二引数で一次元配列に変換する階層を指定する

1$array = ['key-1' => 1, 'key-2' => ['key-2-2' => 2], [3, ['key-3' => 4]]];
2dd(Arr::flatten($array));
3
4// 結果(添字配列の一次元配列に変換される)
5array:4 [6  0 => 1
7  1 => 2
8  2 => 3
9  3 => 4
10]

上記の例では、第二引数にを指定しているので配列内の一階層以降の部分['key-3' => 4]は一次元配列に変換されません。

Arr::forget ドット記法で指定したキーに対応する要素を削除

ドット記法で指定したキーを配列から削除します。

Arr::forget

Arr::forget(&配列, 削除するキー(ドット記法)): void

  • 削除するキーはドット記法で指定可
  • 第一引数に渡す配列は参照渡し
  • キー削除後の配列は返り値では返ってこない。参照渡しした配列が変換される。
  • 削除するキーは配列で複数指定可
  • コレクションは不可(エラーになる)

使用例

1$array = [
2    'key-1' => 1,
3    'key-2' => ['key-2-1' => 2],
4    'key-3' => ['key-3-1' => 5],
5];
6Arr::forget($array, 'key-3.key-3-1'); //ドット記法でキーの指定が可能
7dd($array);
8
9// 結果
10// key-3-1のキーと値が削除されている
11array:3 [12  "key-1" => 1
13  "key-2" => array:1 [14    "key-2-1" => 2
15  ]
16  "key-3" => []
17]

削除するキーは配列で複数指定が可能です。

削除するキーを複数指定

1$array = [
2    'key-1' => 1,
3    'key-2' => ['key-2-1' => 2],
4    'key-3' => ['key-3-1' => 5],
5];
6Arr::forget($array, ['key-2', 'key-3.key-3-1']);
7dd($array);
8
9// 結果
10array:2 [11  "key-1" => 1
12  "key-3" => []
13]

コレクションを指定するとエラーになります。

コレクションを指定するとエラーになる

1$collection = Collection::make([
2    'key-1' => 1,
3    'key-2' => ['key-2-1' => 2],
4    'key-3' => ['key-3-1' => 5],
5]);
6Arr::forget($collection, 'key-3.key-3-1');
7
8// エラー
9// Indirect modification of overloaded element of Illuminate\Support\Collection has no effect

今回はArr::firstArr::flattenArr::forgetの三つの配列系へルパ関数の紹介でした。

以下まとめです。

まとめ

  • Arr::first(条件に一致した最初の要素を取得)
  • Arr::flatten(多次元配列を一次元配列に変換)
  • Arr::forget(ドット記法で指定したキーを削除)

残りのへルパ関数もまとめていきたいと思いますのでぜひ覗いていってください。

.Dev.Record