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
)
)
)
*/