5.6のartisanコマンドまとめという記事を作成したのですが、やはりLaravelは開発のスピードが早いため、知らない便利なコマンドが存在することを実感することになりました。そこで、そんな「知らないけど便利な」テクニックを習得しておくために、今回はLaravelに用意されている数々の「ヘルパー関数」を学び直してまとめることにしました。中にはPHPの標準関数として採用してほしいぐらい便利なものもあるので、ぜひみなさんも開発の効率化の参考にしてください。ひとつずつ見ていきましょう。5.8以降では、ヘルパー関数の書き方が変更になっていますのでご注意ください。functionとして実行するようになりました。なってしまうと新しいLaravelをインストールした場合は問題ないですが、単にLaravelのバージョンを上げたいときにエラーが発生してしまうことになります。5.8以降でも使えるようにパッケージを用意してくれています。合わせて読みたい配列array_add()で配列に新しい値を追加する配列に新しい値を追加します。25);これを実行すると以下のようになります。25;としますが、この関数との違いはすでにキーが存在する場合は無視されるという部分です。以下の場合だと「age」は25ではなく30のままです。['藤原']];print_r(array_collapse($users));これを実行すると以下のようになります。array_divide($user);print_r($keys);print_r($values);これを実行すると以下のようになります。上の配列がキーで下が値です。23)array_dot()で「ドットつなぎ」をキーとする配列にする例えば、以下のようなスマホ・データを1次元配列に変換する場合です。]];print_r(array_dot($phone));実行結果はこうなります。見ての通り、階層が深くなるにつれてドットでキーを繋いでいきます。8)array_except()で指定したキー「以外」のデータを取得する例えば、あるユーザーデータの「age」「job」以外のデータだけを取得する場合です。'job']);print_r($new_array);これを実行すると以下のように「id」と「name」だけの配列になります。鈴木)array_first()である条件を最初に満たすデータを取得する例えば、最初にテストの点が80点以上だった人の点数を取得する場合です。80点以上});実行結果は「82」となります。ちなみに、function()の引数が、$value$keyとなっているのも気をつけたいところです。第3引数を設定しておくと、どれも該当しない場合のデフォルト値にすることができます。-100);つまり、これは「-100」となります。array_last()である条件を最初に満たすデータを取得するarray_first()の逆で最後に該当するデータを取得するヘルパー関数です。使い方は同じなのでarray_first()を参照してください。]];print_r(array_flatten($user));実行結果はこうなります。音楽鑑賞)array_forget()で値を削除する例えば、あるユーザーの趣味データを削除する場合です。'hobbies');print_r($user);実行結果はこうなります。鈴木)また、配列の深い階層だけを削除する場合はドットで繋いだキーを使います。上の例を使って、室内の趣味だけを削除してみましょう。'hobbies.inside');結果はこうです。))array_pull()で値を削除するarray_forget()とほぼ同じですが、array_pull()は削除されたデータの取得ができるのが特徴です。'hobbies.inside');print_r($user);print_r($removed);実行結果はこうなります。音楽鑑賞)array_get()で特定のデータを取得する例えば、あるユーザーの趣味データを取得する場合です。'hobbies'));これを実行すると、以下のようになります。))また、深い階層はドットつなぎで指定することができます。'hobbies.inside')さらに、データが見つからない場合のためのデフォルト値は第3引数で指定します。['なし']);array_has()でキーを指定してデータの存在チェックをする例えば、あるユーザーデータに「name」が含まれているかをチェックする場合です。'「name」があります';}また、階層が深いデータはドットつなぎで指定することもできます。あります';}さらに、キーを配列で指定することで一気に複数データが存在しているかをチェックすることもできます。'「id」も「name」もあります';}array_only()でキーを指定してデータ取得する例えば、あるユーザーデータから「id」と「name」だけを取得する場合です。'name']));実行結果はこうなります。鈴木)ちなみにキーは配列でなくても使えます。'id')ただし、ドットつなぎで階層を深くする取得はできません。これはうまくいきません。['hobbies.inside'])array_pluck()で該当する全データを取得する例えば、全ユーザーの「室内の趣味」を配列で取得する場合です。'hobbies.inside'));これを実行すると以下のようになります。))また、キーを「id」として取得することもできます。'id');すると結果は以下のようになります。))array_prepend()で配列の先頭にデータ追加する例えば、「山本」さんを先頭に追加する場合です。'山本'));結果はこうなります。田中)また、キーが必要な場合は第3引数に指定します。'yamamoto'));結果はこうです。田中)array_random()でランダムに値を取得する例えば、ランダムで名前を取得する場合です。※ちなみにarray_rand()はPHPの標準関数でインデックス値を返します。似ているので間違えないようにしましょう。第2引数に数字をいれると、その個数分のランダムな配列データを取得することもできます。2);array_set()で値をセットする配列に新しい値を追加する、もしくはすでにデータがある場合は上書きするヘルパー関数です。名前がわからないユーザーデータに名前データを追加する場合はこうなります。'鈴木');print_r($user);これを実行すると以下のようになります。鈴木)また、すでにデータが存在する場合はデータが上書きされます。例のようにドットつなぎで深い階層を指定することもできます。['読書']);print_r($user);実行結果はこうなります。))array_sort()で並べ替える例えば、名前の読みがな順に並べ替えをする場合です。array_sort($names);print_r($sorted);実行結果はこうなります。やまもと)※キーが保持されていることに注意してください。array_sort()ではfunction()でより複雑な並べ替えもできるようになっています。以下は多重配列になっている複数ユーザーを読みがなで並べ替える例です。このデータを元に並べ替えられる});print_r($sorted);実行結果はこうなります。))array_sort_recursive()で再帰的にデータを並べ替え例えば、2グループの名前(かな)を一気に並べ替えする場合です。array_sort_recursive($users);print_r($sorted);これを実行すると以下のようになります。))array_where()である条件を満たすデータだけを取得する例えば、テストで80点以上の点数だけを取得する場合です。ここ条件を満たすものだけ取得});print_r($filtered);実行結果はこうなります。95)array_wrap()で配列をつくる例えば、文字列の名前を配列にしたい場合です。array_wrap($name);print_r($names);これを実行するとこうなります。鈴木)ちなみに、元から値が配列になっている場合は変化なしです。array_wrap(['鈴木']);また、値が「null」の場合は空の配列が返ってきます。array_wrap(null);(実行結果)Array()data_fill()で新しいデータを追加する例えば、野外の趣味が登録されていないユーザーに新しく「登山」を追加する場合です。['登山']);print_r($user);これを実行するとこうなります。))ただし、注意が必要なのはすでに存在しているデータは無視されるということです。実際の例で見てみましょう。以下の例だと、すでに「BBQ」というデータが存在しているので「登山」の追加は無視されます。['登山']);print_r($user);結果はこうなります。))また、「*」アスタリスクをワイルドカードにして一気にデータ追加することもできます。'室内');print_r($user);結果はこうなります。))data_get()で指定のデータを取得するarray_get()と同様です。使い方はarray_get()をご覧ください。data_set()で値をセットするarray_set()と同様です。使い方はarray_set()をご覧ください。head()で配列の最初の値を取得する例えば、配列にある一番最初の名前を取得する場合です。鈴木last()で配列の最後の値を取得する例えば、配列にある一番最後の名前を取得する場合です。app_path('Http/Controllers/Controller.php');実行結果はこうなります。base_path('vendor/bin');実行結果はこうなります。config_path('app.php');実行結果はこうなります。database_path('factories/UserFactory.php');実行結果はこうなります。mixを使っておこなっている場合、自動的にそのハッシュ情報を追加したパスを返してくれるヘルパー関数です。.version();使い方はこうなります。mix('css/app.css');実行結果です。public_path('css/app.css');実行結果はこうなります。resource_path('assets/sass/app.scss');実行結果はこうなります。storage_path('app/file.txt');実行結果はこうなります。(実行環境によって変わります)/home/admin/php-dev/laravel56/storage/app/file.txtURLurl()でURLを取得するサイトのURLを取得する基本となる関数です。url('images/picture.jpg');これを実行すると以下のようになります。http://*****.test/images/picture.jpgまた、パラメータを含んだURLを作成したい場合は第2引数に配列で指定します。http://*****.test/item/1また、url()は少し特殊で空のまま使うと「UrlGenerator」のインスタンスが返ってきます。以下のように様々なURL情報を簡単に取得することができます。$url->previous();secure_url()でHTTPSを含んだURLを取得するurl()とほぼ同じです。引数を空にした使い方はできません。action()でコントローラーとアクションからURLを取得するweb.phpなどRouteで定義されたURLを取得する場合です。(つまり、Routeで指定されていないものを指定できません。action('HomeController@index');もしGETパラメータをつけたい場合は連想配列を第2引数に設定します。asset('img/photo.jpg');これを実行すると以下のようになります。secure_asset('img/photo.jpg');これを実行すると以下のようになります。https://*****.test/img/photo.jpgroute()でルート名を指定してURLを取得するまず、以下のようにRouteに名前を決めておきます。'HomeController@contact')->name('home.contact');そして、以下のようにすると該当するURLが取得できます。http://*****.test/contactもし、パラメータが必要なRouteの場合は第2引数に連想配列で指定します。1]);実行結果はこうなります。http://*****.test/contact/1なお、もし相対的なURLを取得したい場合は第3引数に「false」を設定してください。class_basename('App\Http\Controllers\HomeController');実行結果はこうなります。HomeControllere()で特殊文字をエスケープするhtmlspecialchars()と同じような関数ですが、一文字だけなので使い勝手はこちらの方がいいです。e('<div>テキスト</div>');実行結果はこうなります。&lt;div&gt;テキスト&lt;/div&gt;gt;なお、第2引数はダブル・エンコードを許可するかしないかを指定できるようになっています。「&quot;」のようにすでにエスケープされた文字が含まれている場合で、第2引数を「false」にすると「&quot;」の処理は無視させることができます。false);str_replace_array()で文字列置換を一気に行うPHP標準関数のstr_replace()を拡張したような関数で、配列を使うことで一気に文字列置換をすることができます。'1番目は「?」、2番めは「?」。$text);実行結果はこうなります。1番目は「鈴木」、2番めは「佐藤」。str_replace_first()で最初の文字だけを置換する例えば、テキスト中にある最初の「鈴木」を「佐藤」に置換する場合です。'鈴木さんと鈴木さんです。$text);これを実行するとこうなります。佐藤さんと鈴木さんです。str_replace_last()で最初の文字だけを置換する例えば、テキスト中にある最後の「鈴木」を「佐藤」に置換する場合です。'鈴木さんと鈴木さんです。$text);これを実行するとこうなります。鈴木さんと佐藤さんです。preg_replace()を拡張したような関数で、配列を使うことで一気に正規表現を使って文字列置換をすることができます。'1番目は「:one」、2番めは「:two」。$text);これを実行するとこうなります。1番目は「鈴木」、2番めは「佐藤」。えおstr_start()で指定した文字で始まるテキストを取得する例えば、必ず始まりが「/」になるURLを取得したい場合です。'/');上の例の場合はどちらも/public/imagesとなります。str_finish()で指定した文字で終わるテキストを取得する例えば、必ず最後が「/」になるURLを取得したい場合です。'/');上の例の場合はどちらもpublic/images/となります。str_limit()で指定した文字列で切り詰めたテキストを取得する例えば、長いテキストを表示するスペースがなく最初の部分だけを表示する場合です。'今日はいい天気です。明日は雨が降るそうです。25);これを実行すると以下のようになります。...ここで注意が必要なのが、指定する数字はマルチバイトを考慮しないといけないという部分です。以下のように長さを3としても日本語だと一文字しか切り詰めてくれません。今...なお、第3引数で切り詰めたあとの文字を指定することもできます。'(以下略)');実行結果はこうなります。(以下略)str_plural()で複数形のテキストを取得するこの関数が便利なのは、「woman」「child」などのイレギュラーな複数形も正しく作成できるところです。womenまた、数字を指定することで単数形と複数形を切り替えることもできます。women(複数形)str_singular()で単数形のテキストを取得する「women」のような不規則変化の複数形もきちんと単数形に変換することができます。'「あいう」ではじまります。'「うえお」で終わります。';}str_contains()で特定の文字列が含まれているかチェックする例えば、テキストの中に「鈴木」が含まれているかをチェックする場合です。'「鈴木」が含まれています。';}また、配列を指定することで一気に複数のチェックをすることもできます。'「鈴木」もしくは「佐藤」が含まれています。';}str_is()でワイルドカードを使ってマッチするかチェックするワイルドカードは「*」です。'今日はいい天気です。';}もちろんワイルドカードを2つ使ってもチェックが可能です。'今日はいい天気です。