端くれプログラマの備忘録 Laravel [Laravel] 配列&オブジェクトのヘルパー関数 (3)

[Laravel] 配列&オブジェクトのヘルパー関数 (3)

公式サイトを見て知識を入れる。

Helpers – Laravel – The PHP Framework For Web Artisans
https://laravel.com/docs/master/helpers

Arr::sortRecursive($array)

部分配列(数値によるインデックス)にはsort関数を、連想配列にはksort関数を用いて、配列を再帰的にソートする。

use Illuminate\Support\Arr;
$array = [
    ['Roman', 'Taylor', 'Li'],
    ['PHP', 'Ruby', 'JavaScript'],
    ['one' => 1, 'two' => 2, 'three' => 3],
];
$sorted = Arr::sortRecursive($array);
/*
    [
        ['JavaScript', 'PHP', 'Ruby'],
        ['one' => 1, 'three' => 3, 'two' => 2],
        ['Li', 'Roman', 'Taylor'],
    ]
*/

Arr::toCssClasses($array)

CSSクラスの文字列を条件付きでコンパイルする。引数にはクラスの配列を指定する。配列のキーは追加したいクラス、値にはクラスの有効/無効をブール値で指定する。配列の要素が数値キーの場合は、それは常にレンダリングされたクラスリストに含まれる。

use Illuminate\Support\Arr;
$isActive = false;
$hasError = true;
$array = ['p-4', 'font-bold' => $isActive, 'bg-red' => $hasError];
$classes = Arr::toCssClasses($array);
/*
    'p-4 bg-red'
*/

Arr::undot($array)

ドット記法を用いた1次元配列を多次元配列に展開する。

use Illuminate\Support\Arr;
$array = [
    'user.name' => 'Kevin Malone',
    'user.occupation' => 'Accountant',
];
$array = Arr::undot($array);
// ['user' => ['name' => 'Kevin Malone', 'occupation' => 'Accountant']]

Arr::where($array, $callback)

与えられたクロージャを用いて配列をフィルターする。

use Illuminate\Support\Arr;
$array = [100, '200', 300, '400', 500];
$filtered = Arr::where($array, function ($value, $key) {
    return is_string($value);
});
// [1 => '200', 3 => '400']

Arr::whereNotNull($array)

与えられた配列から全てのnull値を削除する。

use Illuminate\Support\Arr;
$array = [0, null];
$filtered = Arr::whereNotNull($array);
// [0 => 0]

Arr::wrap($string)

与えられた値を配列でラップする。与えられた値が既に配列ならば、変更せずにそのまま返す。与えられた値がnullならば、空の配列を返す。

use Illuminate\Support\Arr;
$string = 'Laravel';
$array = Arr::wrap($string);
// ['Laravel']

use Illuminate\Support\Arr;
$array = Arr::wrap(null);
// []

data_fill($target, $key, $value)

ネストされた配列またはオブジェクト内の不足している値を “ドット” 表記で設定する。ワイルドカードとしてアスタリスクも使用できる。

$data = ['products' => ['desk' => ['price' => 100]]];
data_fill($data, 'products.desk.price', 200);
// ['products' => ['desk' => ['price' => 100]]]
data_fill($data, 'products.desk.discount', 10);
// ['products' => ['desk' => ['price' => 100, 'discount' => 10]]]

$data = [
    'products' => [
        ['name' => 'Desk 1', 'price' => 100],
        ['name' => 'Desk 2'],
    ],
];
data_fill($data, 'products.*.price', 200);
/*
    [
        'products' => [
            ['name' => 'Desk 1', 'price' => 100],
            ['name' => 'Desk 2', 'price' => 200],
        ],
    ]
*/

data_get($target, $key, $default=null)

ネストされた配列またはオブジェクトから、ドット記法で値を取得する。指定されたキーが見つからなかった場合に返されるデフォルト値も指定できる。ワイルドカードとしてアスタリスクも使用可能で、ワイルドカードにより配列やオブジェクトの任意のキーを対象とすることができる。

$data = ['products' => ['desk' => ['price' => 100]]];
$price = data_get($data, 'products.desk.price');
// 100

$discount = data_get($data, 'products.desk.discount', 0);
// 0

$data = [
    'product-one' => ['name' => 'Desk 1', 'price' => 100],
    'product-two' => ['name' => 'Desk 2', 'price' => 150],
];
data_get($data, '*.name');
// ['Desk 1', 'Desk 2'];

data_set($target, $key, $value, $overwrite=true)

ネストした配列やオブジェクトに値を設定する。ワイルドカードとしてアスタリスクも使用可能で、それに応じてターゲットに値を設定することができる。デフォルトでは規定の値は全て上書きされる。値が存在しない場合のみ値を設定したい場合には、4番目の引数にfalseを指定する。

$data = ['products' => ['desk' => ['price' => 100]]];
data_set($data, 'products.desk.price', 200);
// ['products' => ['desk' => ['price' => 200]]]

$data = [
    'products' => [
        ['name' => 'Desk 1', 'price' => 100],
        ['name' => 'Desk 2', 'price' => 150],
    ],
];
data_set($data, 'products.*.price', 200);
/*
    [
        'products' => [
            ['name' => 'Desk 1', 'price' => 200],
            ['name' => 'Desk 2', 'price' => 200],
        ],
    ]
*/

$data = ['products' => ['desk' => ['price' => 100]]];
data_set($data, 'products.desk.price', 200, $overwrite = false);
// ['products' => ['desk' => ['price' => 100]]]

head($array)

与えられた配列の最初の要素を返す。

$array = [100, 200, 300];
$first = head($array);
// 100

last($array)

与えられた配列の最後の要素を返す。

$array = [100, 200, 300];
$last = last($array);
// 300