現在の位置: ホーム> 最新記事一覧> フィールドごとに連想配列を分割して処理する方法

フィールドごとに連想配列を分割して処理する方法

M66 2025-04-28

PHPでは、 Array_Chunk関数は通常、アレイを複数の小さなアレイに分割するために使用されます。ただし、この関数は、デフォルトでは配列のサイズに応じてのみ分割でき、配列内の特定のフィールドに応じて分割することはできません。指定されたフィールドで連想配列を分割し、配列のデータを段階的に処理する場合は、少し変更する必要があります。

この記事では、 Array_Chunk関数を他のいくつかのPHP手法と組み合わせて使用​​して、指定されたフィールドに従って連想配列を分割し、段階的に処理する方法を紹介します。

1。array_chunk関数を使用する基本的な方法

Array_chunk関数は、PHPで非常に便利な機能であり、配列を複数のサブアレイに分割し、多次元配列を返すことができます。基本的な構文は次のとおりです。

 array_chunk(array $array, int $size, bool $preserve_keys = false): array
  • $配列:分割する配列。

  • $サイズ:各サブアレイのサイズ。

  • $ preserve_keysTrueに設定されている場合、配列のキー名が保持されます。それ以外の場合は、再インデックスします。

たとえば、次のコードは、2つの要素を含む各サブアレイに数字の単純な配列を分割します。

 $numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9];
$result = array_chunk($numbers, 2);
print_r($result);

出力結果:

 Array
(
    [0] => Array ( [0] => 1 [1] => 2 )
    [1] => Array ( [0] => 3 [1] => 4 )
    [2] => Array ( [0] => 5 [1] => 6 )
    [3] => Array ( [0] => 7 [1] => 8 )
    [4] => Array ( [0] => 9 )
)

2。フィールドごとに連想配列を分割します

連想配列の場合、アレイの特定のフィールドで配列を分割したい場合があります。この時点では、 Array_chunkを使用して配列を分割できますが、他の操作を組み合わせて分割の条件を指定する必要があります。

ユーザーデータを含む関連配列があり、各ユーザーには都市フィールドがあり、これらのユーザーデータを都市フィールドに基づいて複数のサブアレイに分割したいとします。

 $users = [
    ['name' => 'Alice', 'city' => 'New York'],
    ['name' => 'Bob', 'city' => 'Los Angeles'],
    ['name' => 'Charlie', 'city' => 'New York'],
    ['name' => 'David', 'city' => 'Chicago'],
    ['name' => 'Eve', 'city' => 'Los Angeles'],
    ['name' => 'Frank', 'city' => 'Chicago']
];

このデータをシティフィールドごとに分割するには、まずユーザーをCityごとにグループ化する必要があります。 array_reduceまたはその他の方法を使用して実装できます。

 $groupedByCity = [];

foreach ($users as $user) {
    $groupedByCity[$user['city']][] = $user;
}

この時点で、 $ groupedByCityアレイの構造は次のとおりです。

 Array
(
    [New York] => Array
        (
            [0] => Array ( [name] => Alice [city] => New York )
            [1] => Array ( [name] => Charlie [city] => New York )
        )
    [Los Angeles] => Array
        (
            [0] => Array ( [name] => Bob [city] => Los Angeles )
            [1] => Array ( [name] => Eve [city] => Los Angeles )
        )
    [Chicago] => Array
        (
            [0] => Array ( [name] => David [city] => Chicago )
            [1] => Array ( [name] => Frank [city] => Chicago )
        )
)

次に、 array_chunk関数を使用して、各都市のユーザーデータを小さなサブアレイに分割できます。たとえば、各都市のユーザーのリストに最大2人のユーザーを含めることが必要です。

 $chunkedByCity = [];

foreach ($groupedByCity as $city => $users) {
    $chunkedByCity[$city] = array_chunk($users, 2);
}

この時点で、 $ chunkedbycityアレイの構造は次のようになります。

 Array
(
    [New York] => Array
        (
            [0] => Array ( [name] => Alice [city] => New York )
            [1] => Array ( [name] => Charlie [city] => New York )
        )
    [Los Angeles] => Array
        (
            [0] => Array ( [name] => Bob [city] => Los Angeles )
            [1] => Array ( [name] => Eve [city] => Los Angeles )
        )
    [Chicago] => Array
        (
            [0] => Array ( [name] => David [city] => Chicago )
            [1] => Array ( [name] => Frank [city] => Chicago )
        )
)

3.分割データを徐々に処理します

Array_chunkを使用してArrayをフィールドごとに分割すると、これらのサブアレイを段階的に処理できます。たとえば、各都市のデータを通過し、各サブアレイのユーザー情報の出力など、いくつかの操作を実行できます。

 foreach ($chunkedByCity as $city => $chunks) {
    echo "City: $city\n";
    foreach ($chunks as $chunk) {
        echo "Users:\n";
        foreach ($chunk as $user) {
            echo "- {$user['name']}\n";
        }
    }
}

出力の結果は次のとおりです。

 City: New York
Users:
- Alice
- Charlie
City: Los Angeles
Users:
- Bob
- Eve
City: Chicago
Users:
- David
- Frank

4。実用的なアプリケーション:フィールドとプロセスURLを段階的に分割します

URL情報を含む配列があり、URLのドメイン名( M66.NETなど)に従って分割および処理したいとします。簡単な例を次に示します。

 Processing URLs:
- http://m66.net/page1
- http://m66.net/page2