#624301f9e7221
2022.03.29
前回に引き続き本記事でもLaravelの配列関連のへルパ関数を解説していきたいと思います。
参考になれば幸いです。
Memo
Laravelのバージョンは8系統になります。
今回解説するへルパ関数は以下です。
本記事で取り扱うへルパ関数
本記事以外の配列のへルパ関数は下記からどうぞ!!
Arr::toCssClasses CSSのクラス文字を生成
配列を条件付きでCSSクラス文字に変換します。
toCssClasses
Arr::toCssClasses(配列): CSSクラス文字
配列をCSSのクラス文字に変換します。CSSのクラス文字とはHTMLタグに指定するclassのことです。 例えば、下記で言うとmain-content activeがclassになります。
classを含んだHTMLタグ
1<div class="main-content active"> 2 <p>コンテンツ内容</p> 3</div>
Arr::toCssClassesはこのclassの文字列を配列から生成するへルパ関数になります。
下記が使用例になります。
使用例
1// クラス文字列の元になる配列 2$array = ['class-1' => true, 'class-2' => false, 'class-3']; 3Arr::toCssClasses($array); 4 5// 結果(指定した配列からクラス文字列を生成) 6"class-1 class-3"
例からも分かるように、クラス文字列として生成される要素には条件があります。
キーが含まれた要素の場合は値がtrueの場合にキーの文字列がクラス文字列として生成されます。
falseの場合はクラス文字列として生成されません。
上記の使用例では'class-1' => true
と'class-2' => false
がキーを含んだ要素にあたり、
その中でも'class-1' => true
は値がtrueであるため、キーであるclass-1がクラス文字列として生成されています。
キーが含まれている要素
添字配列の要素は常にクラス文字列として生成されます。
こちらも先程の使用例では'class-3'
が添字配列の要素にあたり、クラス文字列として生成されているのがわかります。
添字配列の要素
多次元配列の場合はエラーになり使用できません。
多次元配列を使用(エラー)
1$array = ['class-1' => true, 'class-2' => false, ['class-3', 'class-4']]; 2Arr::toCssClasses($array); 3 4// エラー 5// Array to string conversion
例では['class-3', 'class-4']
部分が多次元配列になっているためArray to string conversion
のエラーが出ています。
また、コレクションの場合もエラーにはなりませんが、クラス文字列として生成されないため使用しない方がいいです。
コレクションを使用(エラー)
1$collection = Collection::make(['class-1' => true, 'class-2' => false]); 2Arr::toCssClasses($collection); 3 4// 結果(要素がそのまま文字列として生成されてしまう) 5"{"class-1":true,"class-2":false}"
例ではコレクション内の要素がそのまま文字列として出力されてしまっています。コレクションでの使用は避けましょう。
Arr::undot ドット記法を用いた一次元配列を多次元配列に変換
ドット記法を用いた一次元配列を多次元配列に変換します。
undot
Arr::undot(配列): 配列
使用例は以下の通りで、ドット記法部分を多次元配列に展開してくれます。
使用例
1$array = ['key1.key1-1' => 1, 'key1.key1-2' => 2, 'key2' => 3]; 2Arr::undot($array); 3 4// 結果(ドット記法を用いた要素が配列として展開される) 5array:2 [▼ 6 "key1" => array:2 [▼ 7 "key1-1" => 1 8 "key1-2" => 2 9 ] 10 "key2" => 3 11]
この例では、配列内でドット記法を用いているキーがkey1.key1-1
とkey1.key1-2
になるので、下記のように展開されています。
展開部分の例
1"key1" => array:2 [▼ 2 "key1-1" => 1 3 "key1-2" => 2 4]
コレクションでも使用できます。
コレクション
1$collection = Collection::make(['key1.key1-1' => 1, 'key1.key1-2' => 2, 'key2' => 3]); 2Arr::undot($array); 3 4// 結果 5array:2 [▼ 6 "key1" => array:2 [▼ 7 "key1-1" => 1 8 "key1-2" => 2 9 ] 10 "key2" => 3 11]
Arr::where クロージャーを使用して配列要素をフィルタリング
クロージャー関数を使用して配列の要素をフィルタリングできます。
where
Arr::where(配列, クロージャー関数): フィルタリング後の配列
使用例は以下の通りです。
使用例
1$array = [1, '1', 2, '2']; 2 3// 値が文字列であることをフィルタリングの条件としてクロージャーを指定 4Arr::where($array, function($value, $key) { 5 return is_string($value); 6}); 7 8// 結果(文字列の要素のみがフィルタリングされる) 9array:2 [▼ 10 1 => "1" 11 3 => "2" 12]
フィルタリングの条件を指定するクロージャー関数は第二引数に指定します。
例でいうと下記の部分がフィルタリングを実施するクロージャー関数になります。
クロージャー関数部分抜粋
1function($value, $key) { 2 return is_string($value); 3}
配列の各要素毎に第二引数で指定したクロージャー関数が実行され、trueを返した要素のみがArr::whereの返り値として配列で返されます。
また、クロージャー関数内では、配列の各要素の値とキーをそれぞれ受け取ることができ、値が第一引数、キーが第二引数としてそれぞれクロージャー関数に渡されます。
第二引数のクロージャー関数について
全体の挙動としては、先程の例で説明すると、配列のフィルタリングの条件としてクロージャー関数内でreturn is_string($value)
としており文字列の要素のみにフィルタリングをかけていることがわかります。
クロージャーは配列内の要素毎に実行されます。
例では1(数値)、1(文字列)、2(数値)、2(文字列)が配列の要素になるので、順番にクロージャー関数が下記のように実行されていきます。
クロージャー関数の実行イメージ
1 2// 1周目 3// $valueに1(数値)が格納されている 4function ($value, $key) { 5 // $valueは数値なのでfalseを返す 6 return is_string($value); 7} 8 9// 2周目 10// $valueに1(文字列)が格納されている 11function ($value, $key) { 12 // $valueは文字列なのでtrueを返す 13 return is_string($value); 14} 15 16// 3周目 17// $valueに2(数値)が格納されている 18function ($value, $key) { 19 // $valueは数値なのでfalseを返す 20 return is_string($value); 21} 22 23 24// 4周目 25// $valueに2(文字列)が格納されている 26function ($value, $key) { 27 // $valueは文字列なのでtrueを返す 28 return is_string($value); 29}
最終的にArr::whereの返り値としてクロージャー関数内でtrueを返した要素が返却されます。
例では2週目と4週目にtrueを返した、1(文字列)、2(文字列)が返されています。
結果
1// 結果 2// 2、4週目の要素がtrueを返しているので返り値として返却される 3array:2 [▼ 4 1 => "1" 5 3 => "2" 6]
返り値のキーは例を見て分かる通りリセットされません。
コレクションでは使用できずエラーになります。
コレクション(エラー)
1$collection = Collection::make([1, '1', 2, '2']); 2Arr::where($collection, function($value, $key) { 3 return is_string($value); 4}); 5 6// エラー 7// array_filter(): Argument #1 ($array) must be of type array, Illuminate\Support\Collection given
Arr::whereNotNull 配列内からnull要素を削除
配列内からnull要素を削除します。
whereNotNull
Arr::whereNotNull(配列): 配列
使用例
1$array = [null, 0, '', [], false]; 2Arr::whereNotNull($array); 3 4// 結果(null要素が削除されている) 5array:4 [▼ 6 1 => 0 7 2 => "" 8 3 => [] 9 4 => false 10]
上記の例では、nullが削除された配列が返ってきているのがわかります。
添字配列の場合、null削除後の配列はキーがリセットされません。
Arr::wrap 指定した値を配列にラップ
指定した値を配列にラップします。
wrap
Arr::wrap(要素): 配列
以下の例では指定した文字列が配列として返されています。
使用例
1$string = '1'; 2Arr::wrap($string); 3 4// 結果 5array:1 [▼ 6 0 => "1" 7]
nullが指定された場合は空の配列が返されます。
nullを指定
1Arr::wrap(null); 2 3// 結果 4[]
また、配列を指定した場合はそのまま返されます。
引数に配列を指定
1$array = ['1']; 2Arr::wrap($array); 3 4// 結果(引数に指定した配列がラップされることなくそのまま返される) 5array:1 [▼ 6 0 => "1" 7]
今回はtoCssClasses、undot、where、whereNotNull、wrapと5つのへルパ関数を紹介しました。
以下まとめになります。
まとめ
配列のへルパ関数も残り5つになりました!次回の記事で最後まで紹介していきたいと思います!
本記事以外でも配列のへルパ関数の解説しているので下記からよければどうぞ!