[PHP] 配列の重複を消す方法
2 min read
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
)