phpにおけるsort

著者:杉浦

phpにおけるsort

phpのsort関数の説明です。
 phpの説明書:原文和訳
 phpに備え付けのソート関数はここにある以下の表の通りです。

ソート関数の特性
関数名 ソートの基準 キーと値の相関関係 ソート順 関連する関数
array_multisort() 連想配列の場合は維持し、数値添字配列の場合は維持しない 最初の配列、あるいはソートオプション array_walk()
asort() 維持する 昇順 arsort()
arsort() 維持する 降順 asort()
krsort() キー 維持する 降順 ksort()
ksort() キー 維持する 昇順 asort()
natcasesort() 維持する 大文字小文字を区別しない自然順 natsort()
natsort() 維持する 自然順 natcasesort()
rsort() 維持しない 降順 sort()
shuffle() 維持しない ランダム array_rand()
sort() 維持しない 昇順 rsort()
uasort() 維持する ユーザー定義 uksort()
uksort() キー 維持する ユーザー定義 uasort()
usort() 維持しない ユーザー定義 uasort()

 キーと値の相関関係はキーAなら値a、キーBならbといった関係のことです。マップ的に使っていて配列のキー名に意味があるなら相関関係を維持するべきで、配列のキー名が順番を表すただの数字の様なものなら維持は不要になるでしょう。
 自然順は1A,10A,100Aと並ぶことです。不自然な辞書順は’0’は’A’より小さいからと100A,10A,1Aと並べることです。詳しくはNatural Order String Comparisonを参照するとよいです。
 配列中配列などの複雑なソートをしたいときはユーザ定義ソートを使用することで解決でき安栖。任意の比較関数$value_compare_funcを定義してusort ( array &$array , callable $value_compare_func )と記述します。比較関数の定義にはstrcmp()の様な備え付けの比較関数を利用すると楽です。
 phpのソートはC言語の関数であるsort()を拡張したものです。phpのソースコード中のext/standard/array.cに上記の関数の中身が色々書いてあります。さらにarray.c中のzend_hash_sort()、Zend/zend_hash.h中のzend_hash_sort()内のzend_hash_sort_ex()、zend_hash.c中のzend_hash_sort_ex()と追っていくことができます。

  • この記事いいね! (0)

著者について

杉浦 administrator