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

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

PHPz
PHPzオリジナル
2023-04-19 09:20:40646ブラウズ

PHP では配列を扱う必要がよくありますが、よくある問題の 1 つは、2 次元配列内の重複値を削除する方法です。この問題を解決するのは難しいことではなく、array_maparray_uniquearray_filter など、PHP が提供するいくつかの配列関数を使用できます。次に、2次元配列から重複した値を削除する方法を見てみましょう。

2 次元配列とは何ですか?

2 次元配列とは、配列内の要素も配列であることを意味し、行列として表現できます。 PHP では、次のメソッドを使用して 2 次元配列を作成できます。

$students = array(
    array('name' => '张三', 'age' => 18),
    array('name' => '李四', 'age' => 20),
    array('name' => '王五', 'age' => 22),
    array('name' => '赵六', 'age' => 18)
);

上記のコードでは、$students 配列を作成します。ここで、各要素は配列でもあり、次の内容が含まれます。 nameage は 2 つのキーと値のペアです。この配列は、学生情報のテーブルとして理解できます。

重複値を削除する方法

次に、2 次元配列から重複値を削除するいくつかの方法を紹介します。

方法 1: foreach ループを使用する

function remove_duplicate_by_foreach($arr){
    $result = array();//定义一个新数组,用来存放去重后的数据
    foreach($arr as $key => $value){
        $flag = false;
        foreach($result as $val){
            if($value == $val){
                $flag = true;
                break;
            }
        }
        if(!$flag){ //如果数据不重复,则将其添加到新数组中
            array_push($result, $value);
        }
    }
    return $result;
}

$students = array(
    array('name' => '张三', 'age' => 18),
    array('name' => '李四', 'age' => 20),
    array('name' => '王五', 'age' => 22),
    array('name' => '赵六', 'age' => 18),
    array('name' => '张三', 'age' => 18)
);
print_r(remove_duplicate_by_foreach($students));

上記のコードでは、最初に空の $result 配列を定義し、次に 2 つの foreach ループを使用して元の配列 $arr を要素ごとに走査します。 it$value は、$result 配列内で同じ要素を検索します。見つからない場合は、その要素を $result 配列に追加します。

この方法は比較的シンプルで理解しやすいですが、効率は比較的低く、特にデータが多い場合、走査時間が非常に長くなります。

方法 2: array_map 関数と array_unique 関数を使用する

function remove_duplicate_by_array_map($arr){
    $temp = array_map("serialize", $arr);//将数组中的每个元素都序列化
    $result = array_unique($temp);//去重操作
    $new_array = array();
    foreach ($result as $value) {//反序列化操作
        array_push($new_array, unserialize($value));
    }
    return $new_array;
}

$students = array(
    array('name' => '张三', 'age' => 18),
    array('name' => '李四', 'age' => 20),
    array('name' => '王五', 'age' => 22),
    array('name' => '赵六', 'age' => 18),
    array('name' => '张三', 'age' => 18)
);
print_r(remove_duplicate_by_array_map($students));

上記のコードでは、まず array_map 関数を使用して、元の配列 $arr## を変換します。 # 各要素は文字列にシリアル化され、array_unique 関数を使用してシリアル化された文字列の重複が除去され、最後に foreach ループを使用して通常の配列要素に逆シリアル化されます。

この方法は方法 1 よりもわずかに効率的ですが、シリアル化および逆シリアル化のプロセスがパフォーマンスに影響を与える可能性があります。

方法 3: array_filter 関数を使用する

function remove_duplicate_by_array_filter($arr){
    $unique_arr = array_unique(array_map('serialize',$arr));//先将数组序列化再去重
    return array_filter($unique_arr, function($var){//回调函数进行反序列化
        return unserialize($var);
    });
}

$students = array(
    array('name' => '张三', 'age' => 18),
    array('name' => '李四', 'age' => 20),
    array('name' => '王五', 'age' => 22),
    array('name' => '赵六', 'age' => 18),
    array('name' => '张三', 'age' => 18)
);
print_r(remove_duplicate_by_array_filter($students));

上記のコードでは、まず

array_map 関数を使用して、元の配列 $arr の各要素をフィルターします。 要素はすべて文字列にシリアル化され、その後、array_unique 関数を使用してシリアル化された文字列の重複が排除され、最後に array_filter 関数を使用して逆シリアル化操作が実装されます。

最初の 2 つの方法と比較して、この方法はコードが少なく、より効率的です。

概要

PHP では、2 次元配列内の重複する値を削除することは難しくありません。

array_maparray_unique を使用できます。 Array_filter などの関数が実装されています。より効率的な処理結果を得るには、必要に応じてさまざまな方法を選択してください。

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

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