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

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

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

インターネットの発展に伴い、PHP は最も人気のあるプログラミング言語の 1 つになりました。 PHP 開発では、多くの場合、配列のデータ構造を使用する必要があります。実際の開発では、配列に対して重複排除操作を実行する必要があることがよくあります。この記事では、PHP で 2 次元配列から重複を削除する方法を紹介します。

2 次元配列は、多数の配列で構成される大きな配列です。これらの配列の重複を排除する必要がある場合は、PHP で array_unique() 関数を使用する必要があります。ただし、array_unique() 関数を直接使用して 2 次元配列内の重複項目を削除すると、期待した効果を得ることができません。

以下は、重複を削除する必要がある 2 次元配列の例です。

$arr = array(
    array('id'=>1, 'name'=>'Tom'),
    array('id'=>2, 'name'=>'Jerry'),
    array('id'=>3, 'name'=>'Bob'),
    array('id'=>1, 'name'=>'Tom')
);

以下に示すように、array_unique() 関数を使用して重複を削除すると、

$arr = array_unique($arr);

その後、実行結果が期待どおりではないことがわかります。 2 次元配列内の重複を正しく削除するには、次のメソッドを使用する必要があります。

方法 1:

まず、重複排除する必要がある配列を文字列に変換し、次に array_unique() 関数を使用して重複を削除します。最後に、結果を PHP 配列に変換します。

$str = '';
foreach ($arr as $k => $v) {
    $str .= implode(',', $v) . ';';
}
$str = implode(',', array_unique(explode(';', trim($str, ';'))));
$arr = array();
foreach (explode(';', $str) as $k => $v) {
    $arr[$k] = explode(',', $v);
}
print_r($arr);

このメソッドは 2 次元配列内の重複項目を削除できますが、より面倒で効率的ではありません。

方法 2:

PHP の別の関数 array_column() を使用すると、2 次元配列からすべてのフィールドを抽出し、1 次元配列を返すことができます。

$arr = array(
    array('id'=>1, 'name'=>'Tom'),
    array('id'=>2, 'name'=>'Jerry'),
    array('id'=>3, 'name'=>'Bob'),
    array('id'=>1, 'name'=>'Tom')
);
$idArr = array_column($arr, 'id');
$countArr = array_count_values($idArr);
foreach ($arr as $k => $v) {
    if ($countArr[$v['id']] > 1) {
        unset($arr[$k]);
    }
}
print_r($arr);

この方法は比較的単純で、使用する必要がある関数は 2 つだけです。まず array_column() 関数を使用して 2 次元配列内の id フィールドの値をすべて抽出し、次に array_count_values() 関数を使用してこれらの値をカウントします。最後に、元の配列が調べられ、$idArr 配列内の対応する ID カウントが 1 より大きい場合は、項目を削除する必要があることを意味します。

上記の 2 つの方法からわかるように、2 次元配列の重複排除は 1 次元配列よりも若干面倒です。しかし、適切な方法を採用すれば、比較的簡単に重複を削除することができます。

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

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