【Laravel】Laravel5.7のヘルパーを一気に勉強(1) – 配列とオブジェクトその1




Laravel5.7のヘルパー関数のマニュアルをみると、便利な関数がたくさんあったので、一度全部の関数を使ってみたいと思います。
たくさんあるので数回に分けて書いていきます。

今回は配列とオブジェクトに関するヘルパー関数です。
ちなみに、Arrクラスは以下で定義されています。
vendor/laravel/framework/src/Illuminate/Support/Arr.php

Arr::add()

指定した配列にキーと値を指定して配列に追加します。
配列にキーが存在している場合はそのキーを上書きせず処理しません。
キーはドット記法も使えます。

$datas = ['name' => 'Desk'];
$result = Arr::add($datas, 'price', 100);
print_r($result);
/*
Array
(
    [name] => Desk
    [price] => 100
)
*/
$result = Arr::add($result, 'price', 300);
print_r($result);
/*
Array
(
    [name] => Desk
    [name11] => dddd
    [price] => 300
)
*/
$result = Arr::add($datas, 'fish.aji.price', 300);
print_r($result);
/*
Array
(
    [name] => Aji
    [price] => 100
    [fish] => Array
        (
            [aji] => Array
                (
                    [price] => 300
                )
        )
)
*/

Arr::collapse()

配列の値を一次元配列に展開します。
多次元配列は展開しません。

$datas = ['sea' => ['Aji', 'Saba', 'Iwashi'], 'river' => ['Ayu', 'Yamame', 'Iwana']];
$result = Arr::collapse($datas);
print_r($result);
/*
Array
(
    [0] => Aji
    [1] => Saba
    [2] => Iwashi
    [3] => Ayu
    [4] => Yamame
    [5] => Iwana
)
*/
$datas = ['sea' => ['Aji', 'Saba', 'Iwashi'], 'river' => ['Ayu', 'Yamame', 'Iwana'], 'other' => ['aaa' => ['bbb' => ['cccc' => 'zzzz']]]];
$result = Arr::collapse($datas);
print_r($result);
/*
Array
(
    [0] => Aji
    [1] => Saba
    [2] => Iwashi
    [3] => Ayu
    [4] => Yamame
    [5] => Iwana
    [aaa] => Array
        (
            [bbb] => Array
                (
                    [cccc] => zzzz
                )
        )
)
*/

Arr:divide()

配列をキーと値それぞれの配列を返します。
多次元配列の場合、配列を展開することはないので注意です。

$datas = ['id' => 1, 'name' => 'John', 'email' => 'example@example.com'];
[$keys, $values] = Arr::divide($datas);
print_r($keys);
/*
Array
(
    [0] => id
    [1] => name
    [2] => email
)
Array
*/
print_r($values);
/*
(
    [0] => 1
    [1] => John
    [2] => example@example.com
)
*/

Arr::dot()

指定した多次元配列をドット記法をキーにした一次元配列に変換します。

$datas = ['fish' => [['name' => 'Aji', 'price' => 100], ['name' => 'Saba', 'price' => 200], ['name' => 'Iwashi', 'price' => 300]]];
$datas = Arr::dot($datas);
print_r($datas);
/*
Array
(
    [fish.0.name] => Aji
    [fish.0.price] => 100
    [fish.1.name] => Saba
    [fish.1.price] => 200
    [fish.2.name] => Iwashi
    [fish.2.price] => 300
)
*/

Arr::except()

指定したキーを配列から削除します。
多次元配列の場合、ドット記法で指定することができます。

$datas = ['fish' => [['name' => 'Aji', 'price' => 100], ['name' => 'Saba', 'price' => 200], ['name' => 'Iwashi', 'price' => 300]]];
$datas = Arr::except($datas, ['fish.0.price']);
print_r($datas);
/*
Array
(
    [fish] => Array
        (
            [0] => Array
                (
                    [name] => Aji
                )

            [1] => Array
                (
                    [name] => Saba
                    [price] => 200
                )

            [2] => Array
                (
                    [name] => Iwashi
                    [price] => 300
                )
        )
)
*/