現在の位置: ホーム> 最新記事一覧> array_columnを使用するときにインデックスキーが繰り返されるとどうなりますか?重複するインデックスキーを扱う方法は?

array_columnを使用するときにインデックスキーが繰り返されるとどうなりますか?重複するインデックスキーを扱う方法は?

M66 2025-04-28

PHPでは、 Array_Column()は、多次元配列から指定された列からデータを抽出して返すことを可能にする非常に一般的な関数です。この関数は、データベースクエリの結果または構造化されたデータと同様の配列の処理に特に適しています。列のキーを指定することにより、 array_column()は、配列からすべてのデータを簡単に抽出できます。

ただし、多くの開発者は問題に遭遇する可能性があります。Array_Column ()を使用すると、配列のインデックスキーが繰り返されるとどうなりますか?この記事では、この問題を調査し、ソリューションを提供します。

array_column()の紹介

array_column()関数の基本的な使用法は次のとおりです。

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

  • $ column_key :抽出される列のキー名または列のインデックス。

  • $ index_key :オプション。配列を返すインデックスキーを指定できます。

この関数は、指定された列キー$ column_keyに基づいてデータを抽出し、新しい配列を返します。 $ index_keyが指定されている場合、返された配列はこのキーをインデックスとして使用します。

例えば:

 $data = [
    ['id' => 1, 'name' => 'Alice', 'age' => 23],
    ['id' => 2, 'name' => 'Bob', 'age' => 24],
    ['id' => 3, 'name' => 'Charlie', 'age' => 25],
];

$names = array_column($data, 'name'); // ['Alice', 'Bob', 'Charlie']

インデックスキーの重複の状況

$ index_keyパラメーターが指定されている場合、 array_column()は、 $ index_key値をインデックスとして使用して新しい配列を返します。入力配列の$ index_keyキーが繰り返されると、後続の値が前の値を上書きします。一部のデータが失われる可能性があるため、この状況は開発者を混乱させることがよくあります。

例を見てみましょう:

 $data = [
    ['id' => 1, 'name' => 'Alice', 'age' => 23],
    ['id' => 2, 'name' => 'Bob', 'age' => 24],
    ['id' => 1, 'name' => 'Charlie', 'age' => 25],  // id 繰り返す
];

$result = array_column($data, 'name', 'id');

print_r($result);

出力:

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

上記のコードでは、 IDキー( ID値は1)の重複により、 「チャーリー」のみが返された配列に保持され、元の「アリス」値が上書きされます。これは、Array_Column()が重複インデックスに遭遇したときに動作する方法です。

重複するインデックスキーを扱う方法は?

場合によっては、それらを上書きする代わりに、すべての重複したインデックスを維持することをお勧めします。この時点で、この状況に対処するためにいくつかのトリックを使用できます。

1。array_column ()を使用した後、重複インデックスを再処理します

簡単な方法は、array_column()関数が結果を返した後、複製インデックスを手動で処理することです。たとえば、 array_merge()を使用して、同じインデックスを持つ値をアレイにマージできます。

 $data = [
    ['id' => 1, 'name' => 'Alice', 'age' => 23],
    ['id' => 2, 'name' => 'Bob', 'age' => 24],
    ['id' => 1, 'name' => 'Charlie', 'age' => 25],  // id 繰り返す
];

$column = array_column($data, 'name', 'id');

// 处理繰り返す索引,确保所有繰り返す的值被保留
$column = array_map(function($v) {
    return is_array($v) ? $v : [$v];
}, $column);

print_r($column);

出力:

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

    [2] => Array
        (
            [0] => Bob
        )
)

この例では、 array_map()を使用して各値を配列に変換し、すべての値が保存されます。

2。array_mergeを使用して、重複した値をマージします

すべての重複した値を配列にマージしたい場合は、アレイで操作することでこれを行うこともできます。たとえば、次のコードでは、 array_mergeを使用して重複インデックスをマージします。

 $data = [
    ['id' => 1, 'name' => 'Alice', 'age' => 23],
    ['id' => 2, 'name' => 'Bob', 'age' => 24],
    ['id' => 1, 'name' => 'Charlie', 'age' => 25],  // id 繰り返す
];

$result = [];
foreach ($data as $item) {
    $result[$item['id']][] = $item['name'];
}

print_r($result);

出力:

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

    [2] => Array
        (
            [0] => Bob
        )
)

このようにして、データを失うことなく、重複するインデックスを処理する方法を手動で制御できます。

要約します

array_column()は、指定された列からデータを抽出するのに役立つ強力なツールです。ただし、配列にインデックスキーが重複している場合、以前の値を上書きすると、データの損失につながる可能性があります。この状況を処理するために、重複した値のマージやアレイ関数を使用して結果をさらに処理するなど、さまざまなアプローチを取ることができます。特定のニーズに応じて、重複するインデックスキーの問題を解決するための適切な戦略を選択すると、コードがより堅牢で信頼性を高めることができます。