【大阪 / 横浜 / 徳島】インフラ / サーバーサイドエンジニア募集中!

【大阪 / 横浜 / 徳島】インフラ / サーバーサイドエンジニア募集中!

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【WordPress 専用】クラウドサーバー『ウェブスピード』

【WordPress 専用】クラウドサーバー『ウェブスピード』

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【予約システム開発】EDISONE カスタマイズ開発サービス

【予約システム開発】EDISONE カスタマイズ開発サービス

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【200ヶ国以上に対応】グローバル eSIM「ビヨンドSIM」

【200ヶ国以上に対応】グローバル eSIM「ビヨンドSIM」

【中国への旅行・出張・駐在なら】中国SIMサービス「チョコSIM」

【中国への旅行・出張・駐在なら】中国SIMサービス「チョコSIM」

【グローバル専用サービス】北米・中国でも、ビヨンドのMSP

【グローバル専用サービス】北米・中国でも、ビヨンドのMSP

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

PHP8.4でリリースされた新しい配列関数を紹介!

初めまして!
社会人1年目 システム開発部のいおさです!

最近一気に寒くなりましたね。寒くなると寂しくなるのはなぜなんでしょう?

まあ、そんなことは置いといて PHP8.4 がリリースされましたね!!
弊社ではPHPをメインに開発を行っているのですが、今回追加された配列関数が使い勝手良さそうだったので紹介したいと思います!

追加された配列関数

今回追加されたのは

  • array_find()
  • array_find_key()
  • array_any()
  • array_all()

の4つになります!
全ての関数で第一引数に配列、第二引数にコールバック関数を渡すことで使用できます。

またコールバック関数のシグネチャは以下のようになっており、第一引数を要素の値、第二引数を要素のキーとして使うことができます。

 callback(mixed $value, mixed $key): bool 

それでは紹介していきます!!

array_find関数

まず最初は array_find関数 です!
この関数はコールバック関数がtrueを返す最初の要素の値を返してくれて、もし見つからなかった場合nullを返してくれます。

以下が使用例になります!

 $array = [
    'tamabaritake' => 'enoki',
    'haratake' => 'shiitake',
    'hiratake' => 'eringi',
];

// 配列の値が6文字より長い要素を探す
$result = array_find($array, function (string $value){
    return strlen($value) > 6;
});

var_dump($result);
// 結果: string(8) "shiitake"

上記のように、コールバック関数内のstrlen($value) > 6でtrueになった値を返してくれます。

また、以下のようにコールバック関数がtrueを返す値が複数ある場合は、最初の要素のみ返してくれます。

 // ※配列の値は同じです
// 配列の値がeから始まる要素を探す
$result = array_find($array, function (string $value){
    return str_starts_with($value, 'e');
});

var_dump($result);
// 結果: string(5) "enoki"

もしかしたらPHPのフレームワークであるLaravelを使われている人だと気づいてるかもしれませんが、ヘルパ関数のArr::firstと同じ挙動(関数内の処理もほとんど同じ)になっています!

array_find_key関数

次は array_find_key関数 です!

この関数はコールバック関数がtrueを返す最初の要素のキー返してくれて、もし見つからなかった場合nullを返してくれます。
以下が使用例になります!

 $array = [
    'tamabaritake' => 'enoki',
    'haratake' => 'shiitake',
    'hiratake' => 'eringi',
];

// 配列の値が6文字より長いものを探す
$result = array_find_key($array, function (string $value){
    return strlen($value) > 6;
});

var_dump($result);
// 結果:string(8) "haratake"

上記のように探したのは配列の値が6文字より長い要素ですが、返り値はその要素のキーになっています。

また、array_find関数と同様にコールバック関数がtrueを返す値が複数あった場合は、最初の要素のキーのみ返してくれます。

 // ※配列の値は同じです
// 配列の値がeから始まる要素を探す
$result = array_find_key($array, function (string $value){
    return str_starts_with($value, 'e');
});

var_dump($result);
// 結果: string(12) "tamabaritake" 

今まで似たような関数で特定の値のみ調べて対応するキーを返すarray_search関数というのがありました。
しかし、array_find_key関数を使うことで、コールバック内で自分が設定した条件や正規表現などが使用でき、自由度が高くて色々な所で使いやすいと思います!

array_any関数

次はarray_any関数になります!
この関数はコールバック関数がtrueを返す要素が少なくとも1つある場合はtrueを返してくれて、ない場合はfalseを返してくれます。
以下が使用例になります!

$array = [
    'tamabaritake' => 'enoki',
    'haratake' => 'shiitake',
    'hiratake' => 'eringi',
];

// いずれかの値がmから始まる要素があるか
$result = array_any($array, function (string $value){
    return str_starts_with($value, 'm');
});

var_dump($result);
// 結果: bool(false)

// いずれかの値が6文字より長いものがあるか
$result = array_any($array, function (string $value){
return strlen($value) > 6;
});

var_dump($result);
// 結果: bool(true)

こちらもLaravelのCollectionクラスにあるcontainsメソッドと同じ挙動をします!(内部処理は違いますが...)
containsメソッドを使っていた人にとってはarray_any関数の挙動も想像しやすいと思います。

array_all関数

最後は array_all関数 です!
この関数はコールバック関数がtrueを返す要素が全てある場合はtrueを返してくれて、ない場合はfalseを返してくれます。

以下が使用例になります!

$array = [
    'tamabaritake' => 'enoki',
    'haratake' => 'shiitake',
    'hiratake' => 'eringi',
];

// 全ての値がeから始まるか
$result = array_all($array, function (string $value){
    return str_starts_with($value, 'e');
});

var_dump($result);
// 結果: bool(false)

// 全ての配列キーがtakeで終わるか
$result = array_any($array, function (string $value, string $key){
    return preg_match('/.*take$/', $key);
});

var_dump($result);
// 結果: bool(true)

こちらもarray_any関数と同じで、LaravelのCollectionクラスにあるメソッドにあるeveryメソッドと同じ挙動をします。

まとめ

いかかがだったでしょうか!

上記のメソッドの詳しい説明は公式ドキュメントに記述してありますので、ぜひそちらも併せて確認してみてください!
追加された関数一覧 : https://www.php.net/releases/8.4/ja.php#new_array_find

個人的には新しい配列関数ではコールバック関数が使える分、汎用性があり使い勝手の良さそうな印象を受けました。

また、Laravelから流用やインスパイアを受けたものが多かったのかなと思います。
今後もこのような流れが増えて、PHPの言語自体の利便性が良くなれば嬉しいですね!

こんな関数あったなーという程度で覚えていただければ幸いです!

 

 

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
3
読み込み中...
3 票, 平均: 1.00 / 13
21
X facebook はてなブックマーク pocket
【2025.6.30 Amazon Linux 2 サポート終了】Amazon Linux サーバー移行ソリューション

【2025.6.30 Amazon Linux 2 サポート終了】Amazon Linux サーバー移行ソリューション

この記事をかいた人

About the author

いおさ

基本バイクの上にいます。