[PHP] 配列重複消す方法

2 min read
hiroweb developer

array_unique()を使うときに気を付けること

前提条件

例えば、こんな配列がある。
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
    [6] => 7
    [7] => 8
    [8] => 9
    [9] => 2
    [10] => 4
    [11] => 6
    [12] => 8
    [13] => 0
)

この配列は [9],[10],[11],[12] が重複している。
この重複した要素を削除したい。

複雑な配列であればループで取り出したりする手間があるが、今回の場合は単純な配列なので関数を使う。

解決方法

注意点

前述のようにarray_unique()を使うのだが、この関数の注意点は添え字が飛ぶことである。

先ほどの配列をこのarray_unique()に渡すと以下のような結果が返ってくる

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
    [6] => 7
    [7] => 8
    [8] => 9
    [13] => 0
)

重複箇所の要素が消え、添え字が飛んでることがわかる。

解決方法

添え字の飛んだ配列にarray_values()を使う。

array_values()は、数値添字をつけた配列を返してくれるので、飛んだ添え字を埋めてくれるような動きになる。

コード

何かと使うことが多いので関数化した。
public static function get_unique($array){
    return array_values( array_unique($array) );
}

以下のような値が返ってくる

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
    [6] => 7
    [7] => 8
    [8] => 9
    [9] => 0
)