現在の位置: ホーム> 最新記事一覧> array_filter()とarray_column()を使用して2次元配列をすばやく処理します

array_filter()とarray_column()を使用して2次元配列をすばやく処理します

M66 2025-05-14

PHPでは、特にデータボリュームが大きい場合、2次元配列の処理とフィルタリングは一般的なタスクです。幸いなことに、PHPは、効率的な方法でこれを行うのに役立ついくつかの非常に便利な組み込み関数を提供します。この記事では、 array_filter()array_column()関数に焦点を当て、それらを組み合わせて2次元配列のデータを迅速に処理およびフィルタリングする方法を示します。

1。array_column ()関数の紹介

array_column()関数は、多次元配列から列の値を抽出するために使用されます。 2D配列から特定の列の値を抽出するのに最適です。この関数の基本的な構文は次のとおりです。

 array_column(array $array, mixed $column_key, mixed $index_key = null): array
  • $配列:2次元配列。

  • $ column_key :抽出される列のキー。

  • $ index_key :オプションのパラメーター、返された配列のインデックスを指定します。

たとえば、各サブアレイがユーザーの情報を表す2次元配列があります。

 $users = [
    ['id' => 1, 'name' => 'Alice', 'email' => 'alice@m66.net'],
    ['id' => 2, 'name' => 'Bob', 'email' => 'bob@m66.net'],
    ['id' => 3, 'name' => 'Charlie', 'email' => 'charlie@m66.net'],
];

すべてのユーザーの名前列を抽出したい場合は、 array_column()を使用できます。

 $names = array_column($users, 'name');
print_r($names);

出力は次のとおりです。

 Array
(
    [0] => Alice
    [1] => Bob
    [2] => Charlie
)

2。array_filter ()関数の紹介

array_filter()関数は、指定された条件を満たす配列と返品要素の要素をフィルタリングするために使用されます。基本的な構文は次のとおりです。

 array_filter(array $array, callable $callback, int $mode = 0): array
  • $配列:入力配列。

  • $ callback :配列の各要素を判断するために使用されるコールバック関数。

  • $モード:コールバック関数の動作を決定するオプションパラメーター、通常はデフォルト値0を使用します。

メールアドレスにM66.netが含まれているユーザーをフィルタリングしたいとします。 array_filter()を使用して、基準を満たすユーザーをフィルタリングできます。

 $filteredUsers = array_filter($users, function($user) {
    return strpos($user['email'], 'm66.net') !== false;
});
print_r($filteredUsers);

出力は次のとおりです。

 Array
(
    [0] => Array
        (
            [id] => 1
            [name] => Alice
            [email] => alice@m66.net
        )

    [1] => Array
        (
            [id] => 2
            [name] => Bob
            [email] => bob@m66.net
        )

    [2] => Array
        (
            [id] => 3
            [name] => Charlie
            [email] => charlie@m66.net
        )
)

3。ARRAY_COLUMN ()Array_Filter()を使用して結合します

特定の列を同時に抽出してフィルタリングする必要がある場合があります。たとえば、すべてのM66.NETドメイン名のメールアドレスをフィルタリングし、これらのユーザーの名前のみを抽出します。 array_filter()array_column()を組み合わせて使用​​できます。

 $filteredEmails = array_filter($users, function($user) {
    return strpos($user['email'], 'm66.net') !== false;
});

$names = array_column($filteredEmails, 'name');
print_r($names);

出力は次のとおりです。

 Array
(
    [0] => Alice
    [1] => Bob
    [2] => Charlie
)

4.複合使用の実際のケース

APIから取得したユーザーデータのリストがあり、各ユーザーの情報にメールアドレスが含まれているとします。 M66.NETドメイン名を使用してすべてのユーザーをフィルタリングし、そこからユーザーの名前とメールアドレスを抽出したいと考えています。

まず、APIを介してデータを取得し、 $ユーザー配列に保存します。

 $users = [
    ['id' => 1, 'name' => 'Alice', 'email' => 'alice@m66.net'],
    ['id' => 2, 'name' => 'Bob', 'email' => 'bob@m66.net'],
    ['id' => 3, 'name' => 'Charlie', 'email' => 'charlie@m66.net'],
    ['id' => 4, 'name' => 'David', 'email' => 'david@example.com'],
    ['id' => 5, 'name' => 'Eve', 'email' => 'eve@m66.net'],
];

次に、 array_filter()を使用して、メールがm66.netが含まれているユーザーをフィルタリングし、 array_column()を使用して名前とメールを抽出します。

 $filteredUsers = array_filter($users, function($user) {
    return strpos($user['email'], 'm66.net') !== false;
});

$names = array_column($filteredUsers, 'name');
$emails = array_column($filteredUsers, 'email');

print_r($names);
print_r($emails);

出力は次のとおりです。

 Array
(
    [0] => Alice
    [1] => Bob
    [2] => Charlie
    [3] => Eve
)

Array
(
    [0] => alice@m66.net
    [1] => bob@m66.net
    [2] => charlie@m66.net
    [3] => eve@m66.net
)

このようにして、基準を満たすユーザーを除外するだけでなく、名前とメールアドレスを抽出します。

上記は、array_filter()およびarray_column()を介して2次元配列でデータを迅速かつ効率的に処理およびフィルタリングする方法です。これらの2つの機能は、特に大規模なデータセットを扱う場合、コードの読みやすさとパフォーマンスを大幅に改善できます。実際のプロジェクトで柔軟に使用できることを願っています!