ホームページ  >  記事  >  バックエンド開発  >  PHPの二次元配列から重複した値を削除する方法

PHPの二次元配列から重複した値を削除する方法

PHPz
PHPzオリジナル
2023-04-26 10:35:083325ブラウズ

PHP では、2 次元配列の重複排除が一般的な問題です。複数の次元を含む配列に対してデータ処理を実行する必要がある場合、特定の次元の値を統合する必要が生じることがあります。このとき、重複した値がある場合は、データの重複によって引き起こされる問題を回避するために重複を排除する必要があります。この記事では、PHP で 2 次元配列を重複排除する方法を紹介します。

方法 1: array_unique 関数を使用する

array_unique 関数を使用すると、配列内の重複する値を削除し、新しい配列を返すことができます。使用方法は非常に簡単で、重複排除された配列をこの関数に渡すだけです。

たとえば、このような 2 次元配列の場合:

$arr = array(
    array('name' => 'John', 'age' => 20),
    array('name' => 'Mary', 'age' => 25),
    array('name' => 'John', 'age' => 20),
    array('name' => 'Peter', 'age' => 22),
    array('name' => 'Mary', 'age' => 25)
);

array_unique 関数を使用して重複を削除します:

$result = array_unique($arr, SORT_REGULAR);
print_r($result);

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

Array
(
    [0] => Array
        (
            [name] => John
            [age] => 20
        )

    [1] => Array
        (
            [name] => Mary
            [age] => 25
        )

    [3] => Array
        (
            [name] => Peter
            [age] => 22
        )

)

ご覧のとおり、重複した要素が削除されています。

array_unique はデフォルトで配列のすべての次元を重複排除することに注意してください。1 つの次元のみを重複排除したい場合は、特別な処理を実行する必要があります。

たとえば、名前ディメンションを通じて重複を削除するだけの場合は、次のメソッドを使用できます:

//遍历二维数组,将name作为键名
foreach($arr as $value){
    $temp_arr[$value['name']] = $value;
}
//去重后,将数组重新按照数字索引重新排序
$temp_arr = array_values($temp_arr);
print_r($temp_arr);

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

Array
(
    [0] => Array
        (
            [name] => John
            [age] => 20
        )

    [1] => Array
        (
            [name] => Mary
            [age] => 25
        )

    [2] => Array
        (
            [name] => Peter
            [age] => 22
        )

)

参照してください。name をキー名として渡すと、name ディメンションのみを重複排除する効果が得られます。

方法 2: array_reduce 関数を使用する

一般的に使用されるもう 1 つの重複排除方法は、array_reduce 関数を使用することです。 array_reduce 関数は、配列内のすべての要素に対してリダクション操作を実行し、最終的にスカラー値を返すことができます。この関数を使用して、2 次元配列の重複を排除できます。

たとえば、このような 2 次元配列の場合:

$arr = array(
    array('name' => 'John', 'age' => 20),
    array('name' => 'Mary', 'age' => 25),
    array('name' => 'John', 'age' => 20),
    array('name' => 'Peter', 'age' => 22),
    array('name' => 'Mary', 'age' => 25)
);

array_reduce 関数を使用して重複を削除します:

//定义一个回调函数,用于去重
function filter_duplicate($carry, $item){
    if(!in_array($item, $carry)){
        $carry[] = $item;
    }
    return $carry;
}

$result = array_reduce($arr, 'filter_duplicate', array());
print_r($result);

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

Array
(
    [0] => Array
        (
            [name] => John
            [age] => 20
        )

    [1] => Array
        (
            [name] => Mary
            [age] => 25
        )

    [3] => Array
        (
            [name] => Peter
            [age] => 22
        )

)

ご覧のとおり、重複した要素が削除されています。

array_reduce 関数は配列のすべての次元も重複排除することに注意してください。次元の 1 つだけを重複排除したい場合は、array_unique 関数を使用する場合と同様の特別な処理を実行する必要があります。

方法 3: ループ トラバーサルを使用する

もう 1 つの一般的な重複排除方法は、ループ トラバーサルを使用することです。この方法は複雑になりますが、PHPの配列関連の機能を駆使することで柔軟な重複排除処理を実現できます。ループ内で in_array 関数を使用するか、各要素をハッシュすることで、重複した要素を除外できます。

たとえば、このような 2 次元配列の場合:

$arr = array(
    array('name' => 'John', 'age' => 20),
    array('name' => 'Mary', 'age' => 25),
    array('name' => 'John', 'age' => 20),
    array('name' => 'Peter', 'age' => 22),
    array('name' => 'Mary', 'age' => 25)
);

次のコードを使用して重複を削除できます:

$new_arr = array();
foreach($arr as $value){
    $hash = md5(serialize($value)); //计算一个哈希值
    if(!isset($new_arr[$hash])){
        $new_arr[$hash] = $value; //新元素加入新数组
    }
}
$new_arr = array_values($new_arr); //将新数组重新按照数字索引重新排序
print_r($new_arr);

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

Array
(
    [0] => Array
        (
            [name] => John
            [age] => 20
        )

    [1] => Array
        (
            [name] => Mary
            [age] => 25
        )

    [2] => Array
        (
            [name] => Peter
            [age] => 22
        )

)

Yes ご覧のとおり、重複した要素が削除され、新しい配列が数値インデックスに従って並べ替えられています。

要約:

上記は一般的な 3 つの重複排除方法ですが、それぞれの方法には長所と短所があり、実際の状況に応じて適切な方法を選択する必要があります。 2 次元配列を処理する場合は、「シンプルかつ効率的」の原則に従い、PHP が提供する配列関連の関数を可能な限り使用して、コードの複雑さと操作効率を軽減し、プログラムのパフォーマンスを向上させる必要があります。

以上がPHPの二次元配列から重複した値を削除する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。