PHP sortメソッドとnatsortメソッド

4219 ワード

はじめに

sortメソッドで順番を変えた際に、想定していた挙動と異なったので、整理のために記載いたします。

sort

$a = [1, "あああ", 2];
$b = ["1", "あああ", "2"];

sort($a);
sort($b);

上記行った際の結果は、

$a
["あああ", 1, 2];
$b
["1", "2", "あああ"];

上記のようになる。

・そもそも文字列の1と数値の1の順序は違う
・順序は文字列数字 → 文字列 → 数値である

natsort

natsort($a);
natsort($b);

上記の結果は、

$a
[1, 2, "あああ"]

$b
["1", "2", "あああ"]

順番は一緒
nat_sort = SORT_NATURAL - 要素の比較を文字列として行う
ようだ

さいごに

ただ、phpのバージョンによってsortの挙動が異なるのでちゃんと確認する必要がある模様。

※上記実行環境は、Ver.'6.18.3'

補足

flags が SORT_REGULARの場合に 複数の型が混在する配列をソートする場合には、注意してください。 sort() が期待しない結果を出力することがあります。

公式HPに上記のように記載があった..