現在の位置: ホーム> 最新記事一覧> foreachループの代わりにarray_filter()を使用する方が効率的な方法はどれですか?

foreachループの代わりにarray_filter()を使用する方が効率的な方法はどれですか?

M66 2025-06-03

PHP開発では、アレイから特定の条件を満たす要素を除外する必要があることがよくあります。最も一般的な方法の1つは、フィルタリング用の条件付きステートメントを備えたForeachループを使用することです。ただし、PHP標準ライブラリは、この要件のために設計された、より簡潔な関数-Array_Filter()も提供します。それから質問は次のとおりです。

1。基本的な使用法の比較

ユーザーリストの配列があり、18歳以上のユーザーを除外したいとします。

Foreachの使用方法:

 $users = [
    ['name' => 'Alice', 'age' => 22],
    ['name' => 'Bob', 'age' => 17],
    ['name' => 'Charlie', 'age' => 30],
];

$adults = [];
foreach ($users as $user) {
    if ($user['age'] > 18) {
        $adults[] = $user;
    }
}

array_filterの使用方法:

 $users = [
    ['name' => 'Alice', 'age' => 22],
    ['name' => 'Bob', 'age' => 17],
    ['name' => 'Charlie', 'age' => 30],
];

$adults = array_filter($users, function($user) {
    return $user['age'] > 18;
});

コードの読みやすさに関しては、特にロジックが単純な場合は、 array_filter()がよりコンパクトでクリアです。

2。パフォーマンスの比較

単純なテストスクリプトを使用して、2つのパフォーマンスの違いを大量のデータと比較しましょう。

 $users = [];
for ($i = 0; $i < 100000; $i++) {
    $users[] = ['name' => "User$i", 'age' => rand(10, 50)];
}

// 使用 foreach
$start = microtime(true);
$adults1 = [];
foreach ($users as $user) {
    if ($user['age'] > 18) {
        $adults1[] = $user;
    }
}
$time1 = microtime(true) - $start;

// 使用 array_filter
$start = microtime(true);
$adults2 = array_filter($users, function($user) {
    return $user['age'] > 18;
});
$time2 = microtime(true) - $start;

echo "foreach 時間がかかる: {$time1} 2番\n";
echo "array_filter 時間がかかる: {$time2} 2番\n";

テスト結果の例(デバイスによって異なる場合があります):

 foreach 時間がかかる: 0.025 2番
array_filter 時間がかかる: 0.027 2番

ご覧のとおり、パフォーマンスの違いは最小限であり、場合によっては、 Array_Filter()も基本的に内部でループを使用し、関数呼び出しのオーバーヘッドを含むため、 Eachの場合でも少し速くなります。

3。使用の提案

  • array_filter()が使用される推奨シナリオ:

    • 条件は単純で、コードはより明確です。

    • 機能スタイルでコードを書きたい。

    • データ処理チェーンは、他の配列関数( array_map()など)で使用する必要があります。

  • 推奨されるシナリオのために:

    • より高いパフォーマンスと究極の最適化が必要です。

    • 条件付きロジックは複雑であるか、ループの中断が必要です。

    • 元の配列(参照割り当てなど)を実行するには、追加の操作が必要です。

4。概要

場合によっては、 foreachはわずかに優れている場合がありますが、 Array_filter()は、特にコードの読みやすさと保守性を追求する場合、よりエレガントなソリューションを提供します。パフォーマンスに関しては、2つの違いは最小限であり、選択は「効率」を盲目的に追求するのではなく、実際のシナリオに基づいている必要があります

コードを理解して維持しやすくする場合は、 array_filter()を試してみてください。