lodash-PHP : 配列加工に便利なPHP用のUtilityライブラリ



配列やコレクション( 連想配列 ) を加工する時に便利な PHP 用のライブラリ「lodash-php」の紹介です。

 javascriptで有名なライブラリの1つに 「lodash.js」 が挙げられます。lodash.js は " underscore.js " から派生した Utility ライブラリで、主に配列やオブジェクトを加工する時に使われています。

 そんな lodash.js 用のメソッドを PHPで使えるように書き直された便利なメソッド集が  ' lodash-php ' です。
 

lodash-php とは 

- Javascript用のUtilityライブラリ 「Lodash.js」 のメソッドをPHPで使えるようにされたライブラリです

// lodash-phpのコード
use function _\chunk;
use function _\flattenDeep;

// 配列を指定したキーから分割
chunk(['a', 'b', 'c', 'd'], 2)
// => [['a', 'b'], ['c', 'd']]

// 異なる多次元配列をシングルアレイに
flattenDeep([1, [2, [3, [4]], 5]]);
// => [1, 2, 3, 4, 5]


lodash-php のインストール

 lodash-phpは ' composer ' コマンドを使ってプロジェクトに導入します。また、インストールされているPHPのバージョンが " 7.1以上 "の必要があります。

# composerコマンドを使って lodash-phpをインストール
composer require lodash-php/lodash-php


lodash-php の呼び出し

 lodash-php は static関数で実装されているので、クラスをインスタンスする必要はありません。' use ' メソッドを使って呼び出せばモジュール単体 ' _::メソッド名 ' で呼び出せば lodash-php 全てのメソッドにアクセスできます。

// require __DIR__ . '/vendor/autoload.php';

// モジュール単体で呼び出す場合
use function _\chunk; 
chunk(['a', 'b', 'c', 'd'], 2);

// グローバルに呼び出す場合
_::chunk(['a', 'b', 'c', 'd'], 2);


lodash-phpに用意されているメソッド ( * 一部 )

chunk

' chunk ' メソッドは 指定したキー番号から配列を分割するメソッドです。

* chunk( array, number )

use function _\chunk;

$arr = ['a', 'b', 'c', 'd', 'e'];

chunk($arr, 3);
// => [['a', 'b', 'c'], ['d', 'e']]


compact

' compact ' メソッドは 配列の内の値が ' 'や ' false ' の値を除去してくれます。

use function _\compact;

$arr = [1, false, 2, '', 3];

compact($arr);
//=> [1, 2, 3]


concat

' concat ' は値を1つの配列として繋げるメソッドです。似た動作をする PHP標準の関数で ' array_merge ' が挙げられますが、' concat ' メソッドは引数の値が配列である必要はありません

use function _\concat;

concat([1], [2], [[3]], '値');
//=> [1, 2, [3], '値']

concat('a', 'b', 1, 'c');
//=> ['a', 'b', 1, 'c']


flattenDeep

 ' flattenDeep ' は異なる階層の配列を同じ階層の配列に作り直してくれるメソッドです。

use function _\compact;
use function _\flattenDeep;

flattenDeep(concat([1], [2], [[3]], '値'));
//=> [1, 2, 3,'値']

 

sortBy

 ' sortBy ' メソッドは名前の通り要素の並べ替えをしてくれます。第二引数で並べ替えをする処理を ' 配列 ' 又は ' クロージャー ' で処理を記述します。

use function _\sortBy;

$users = [
  [ 'user' => 'fred',   'age' => 48 ],
  [ 'user' => 'barney', 'age' => 36 ],
  [ 'user' => 'fred',   'age' => 40 ],
  [ 'user' => 'barney', 'age' => 34 ],
];
// key 'user' の順で並べ替え
sortBy($users, [function($o) { return $o['user']; }]);
/* => [['user' => 'barney', 'age' => 36], 
       ['user' => 'barney', 'age' => 34], 
       ['user' => 'fred', 'age' => 48], 
       ['user' => 'fred', 'age' => 40]]
*/

// key 'user' 克つ 'age' の順番で並べ替え
sortBy($users, ['user', 'age']);
/* => [['user' => 'barney', 'age' => 34], 
       ['user' => 'barney', 'age' => 36], 
       ['user' => 'fred', 'age' => 40], 
       ['user' => 'fred', 'age' => 48]]
*/


isEqual

 ' isEqual ' メソッドは 値が正しいかチェックするメソッドです。第一引数には元になる値、第二引数には比較する値を指定します。

use function _\isEqual;

$arr1 = [ 'a' => 1];
$arr2 = ['a' => '1'];

isEqual($arr1, $arr2);
//=> true

isEqual(10, '10');
//=> true


inRange

 ' inRange ' メソッドはベースとなる数値が 指定した幅の数値に含まれるか判定してくれます。

* inRange(ベースとなる数値, スタート, エンド )

use function _\inRange;

// 1..10の間に '2'が含まれているかチェック
inRange(2, 1, 10); // true

// 3..5の間に '2'が含まれているかチェック
inRange(2, 3, 5); // false


random

' random ' メソッドは指定した数値の幅から乱数を生成してくれます。

use function _\random;

// 生成する数字は毎回変わります

// 1.. 20 の間で乱数を生成
random(1, 20);
// => 5

// 0..5 の間で乱数を生成
random(5);

// float型(小数点)
random(1.0, 11.9);
//=> 11.830089694788


parseInt

 ' parseInt ' は 文字列型の数値をInteger型の数字に変換してくれます。

* PHP標準の関数、 intvalと同等の動きをします

use function _\parseInt;

parseInt('08');
//=> 8
parseInt('0.3');
//=> 0


repeat

 ' repeat ' メソッドは 文字列を指定した回数分、作成してくれます。

use function _\repeat;

repeat('*', 3);
//=> ***
repeat('あいうえお', 2);
//=> あいうえおあいうえお


startsWith

' startsWith ' メソッドは、ベースになる文字列が 指定した文字から始まっているかチェックしてくれます。

use function _\startsWith;

startsWith('abc', 'a');
//=> true

startsWith('abc', 'b');
//=> false

startsWith('あいうえお', 'あ');
//=> true

 

Summary

上記で紹介しメソッドはほんの一部で lodash-php には GitHub上のレポジトリに挙がっている 時期バージョンも含めると約 100個のメソッドが用意されています。

 要求されるPHPのバージョンが ' 7.1 以上 'と比較的新しい環境が必要ですが、様々な場面で活躍しそうなライブラリです。

GitHub : lodash-php/lodash-php

 

この記事のカテゴリ
プログラミング

この記事に付けられているタグ