我们知道在php数组中分为多维数组与一维数组,我们下面来分别讲述一下php多维数组与一维数组排序原理与实现方法吧。
一维数组
第一组 :sort 和 rsort ,按照PHP数组键值的顺序asc和逆序desc进行排序,同时破坏原来数组的索引关系——其实是删除索引之后重新建立从0开始的数字索引。看一下例程:
代码如下 | 复制代码 |
$a = array("a"=>1,2); sort($a); var_dump($a); rsort($a); var_dump($a); ?> 看一下第一个输出结果,第一个输出: array(2) { [0]=> int(1) [1]=> int(2) } 第二个输出: array(2) { [0]=> int(5) [1]=> int(4) } |
发现没有我们原来定义的索引a哪里去了?哪里去了?可以肯定的说是被他们无情的删除了,你要是对原来的索引关系并不在意的话,可以使用他们!
第二组函数:asort 和 arsort ,这两个函数就比较厉害一点了,只要他们可以保留数组原有的索引关系,把上例的sort 和 rsort 分别用这两个函数替换一下,看运行结果:
代码如下 | 复制代码 |
array(2) { ["a"]=> int(1) [0]=> int(2) } array(2) { [0]=> int(2) ["a"]=> int(1) } |
这个一看就明白的,不用说了吧!
第三组PHP数组排序函数:krsort 和 ksort 这两个不同于以上两组,这两函数是对键名进行排序的,大家可以把上例的函数替换成这两个,看看具体运行结果,这里也不说了,不然这个文章写的就太长了,怕有些兄弟没有耐心看到本文的重点,虽然重点就在下边!
通过自定义函数对PHP数组进行排序,有三个函数分别是:
uasort 通过自定义函数对PHP数组的键值进行排序,并且保留原来的索引关系。
uksort 通过自定义函数对PHP数组的键名进行排序,并且保留原来的索引关系。
usort通过自定义函数对PHP数组的键值进行排序,并且删除原来的索引关系,从零开始建立新的索引。
这个地方当然需要一个例子:
代码如下 | 复制代码 |
输出结果: array(4) { [0]=> int(1) [3]=> int(5) [1]=> int(4) [2]=> int(3) } |
、
多次元配列の一種
たとえば、array_multisort($a,$b)、$a,$b が 2 つの配列である場合、並べ替え後に $a 配列の 3 番目の要素が最初にランク付けされると、その要素に関係なく $b の 3 番目の要素が最初にランク付けされます。 $b のサイズが最初にランク付けされます。以下のプログラムの実行結果を見てください:
コードは次のとおりです | コードをコピー |
$a =array(100,80,50,10,0); |
明らかに、もともと配列 b の 5 番目の要素だった z が 1 位にランクされました。
実際、明確にするために、array_multisort() は最初にキー値のサイズに従って最初の配列を並べ替え、次に最初の配列の調整戦略に従って他の配列を調整します。3 番目の要素が最初に配置され、 2 つの要素を 2 番目の位置に配置します...——実際、これは、この多次元配列ソート アルゴリズムの最も基本的な実施形態です。ただし、2 つの配列の要素の数は同じである必要があることに注意してください。そうでない場合は、警告メッセージが表示されます。
警告: array_multisort() [function.array-multisort]: 配列のサイズが ……
で矛盾しています
まず、多次元配列の各要素 [配列] をソートする操作方法を見てみましょう。非常に簡単ですが、SQL についてある程度の知識がある場合は説明が必要なパラメータがいくつかあります。おそらく一目で理解できるでしょう:
コードをコピー | |
コードをコピー | |
array_multisort() で必要な並べ替えパラメータは列である必要があるため、foreach を使用してこの配列の年齢と名前を読み取ります。
上の例と同様に、ソートの場合は、最後のパラメーター $array を参照する必要があります。最初の 2 つのパラメーターは、ソートする必要がある PHP 配列とは関係がないため、ソートする配列を宣言する必要があります。実際にはそれらは $array 内のデータ ($array から抽出した列) ですが、ソートには当然列が必要ですが、ソートに行データが使用されるのを見たことがありません。
コードをコピー | |
)
[0] => 配列 ( [年齢] => 22 [名前] => di ) [1] => 配列 ( [年齢] => 21 [名前] => ai ) [2] => 配列 ( [年齢] => 20 [名前] => ci ) [3] => 配列 ( [年齢] => 20 [名前] => li ) ) |
付録:
ソート順フラグ:
SORT_DESC – 降順で並べ替えます
SORT_REGULAR – 通常の方法でアイテムを比較します
SORT_NUMERIC – 項目を数値的に比較します
SORT_STRING – 項目を文字列で比較します