PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPの配列から重複する要素を削除する方法(array_flip活用)

PHPの配列から重複する要素を取り除きたい場合、array_flip 関数を利用する方法があります。この関数は、配列のキーと値を入れ替える(値をキーに、キーを値に反転させる)働きを持つため、これを2回繰り返すことで重複要素を効率的に除去できます。

サンプルコード

<?php
    $my_arr = array(45, 65, 67, 99, 81, 90, 99, 45, 68);
    echo "The original array contains \n";
    print_r($my_arr);
    $my_arr = array_flip($my_arr);
    $my_arr = array_flip($my_arr);
    $my_arr = array_values($my_arr);
    echo "\n The array after removing duplicate elements is \n ";
    print_r($my_arr);
?>

実行結果

The original array contains
Array
(
    [0] => 45
    [1] => 65
    [2] => 67
    [3] => 99
    [4] => 81
    [5] => 90
    [6] => 99
    [7] => 45
    [8] => 68
)

The array after removing duplicate elements is
Array
(
    [0] => 45
    [1] => 65
    [2] => 67
    [3] => 99
    [4] => 81
    [5] => 90
    [6] => 68
)

仕組みの解説

まず、重複した値を含む配列を定義します。次に array_flip 関数を使うと、配列の「値」がインデックス(キー)側へ、「キー」が値側へと反転されます。ここで重要なのは、配列のキーは必ず一意(ユニーク)でなければならないというルールです。

そのため、同じ値が複数回出現しても、キーとして反転された時点で1つにまとめられ、後から来た要素によって上書きされることで、自動的に重複が排除されます。

その後、もう一度 array_flip を呼び出すことで、キーと値の関係を元の形に戻します。最後に array_values 関数でキーを振り直すことで、0から始まる連番の添字を持つ、重複のない配列が完成します。

補足:array_unique 関数との違い

なお、PHPには標準で array_unique 関数も用意されており、こちらでも同様に重複を削除できます。ただし array_unique は元のキーを保持する一方、array_flip を使う手法は値の比較が高速に行えるという特徴があります。用途や配列のサイズに応じて使い分けるとよいでしょう。

  1. PHPで配列の要素を削除してインデックスを振り直す方法

    PHPでは、unset()関数を使うことで配列から特定の要素を削除できます。しかし、unset()で要素を削除しただけでは、配列のキー(インデックス)には欠番が残ったままになります。そこで、array_values()関数を組み合わせることで、削除後の配列に対して連番のインデックスを振り直すことができます。 配列要素の削除とインデックス再構築の手順 以下のコードでは、前後に空白を含む文字列の配列を用意し、array_map()で空白を取り除いた後、unset()で要素を削除し、最後にarray_values()でインデックスを振り直しています。 サンプルコード <?php  

  2. C#で配列の要素にアクセスする方法を解説

    C#では、配列の要素にアクセスする際、インデックス(添字)を指定します。配列のインデックスは0から始まるため、最初の要素は「0番目」、3番目の要素は「2番目」としてアクセスすることに注意しましょう。 1. 配列の定義と初期化 まず、配列を定義して初期化します。以下は3つの整数値を持つint型配列の例です。 int[] p = new int[3] {99, 92, 95}; 2. 配列の全要素を表示する forループを使えば、配列内のすべての要素を順番に表示できます。ループ変数をインデックスとして利用し、各要素へアクセスします。 for (j = 0; j < 3; j++ ) {