服务热线
1888888888
作者:文煞发布时间:2024-03-16分类:PHP笔记浏览:195
我们在使用PHP处理数组的时候经常需要对数组进行排序,对于新手来说,可能还不知道怎么对数组进行排序,那么你就可以看看这篇文章,本篇文章将介绍PHP对数组顺序的重新排列知识。如果你已经熟练掌握PHP知识和运用技巧,那么这篇文章可能对你没有任何帮助!
PHP 提供了多种函数对数组进行排序,这些函数可以根据不同的需求对数组进行升序或降序排序。下面介绍几种常用的排序函数及其简要描述:
1. sort():对数组进行升序排列。
2. rsort() :对数组进行降序排列。
3. asort():根据值,以升序对关联数组进行排序,保持键值对应关系。
4. arsort():根据值,以降序对关联数组进行排序,保持键值对应关系。
5. ksort():根据键,以升序对关联数组进行排序。
6. krsort():根据键,以降序对关联数组进行排序。
7. usort():使用用户自定义的比较函数对数组进行排序。
8. uasort():使用用户自定义的比较函数对关联数组进行排序,保持键值对应关系。
9. uksort():使用用户自定义的比较函数对关联数组的键进行排序。
10. array_multisort()+uasort()函数搭配:可对二维数组(复杂的多维数组)进行排序。
注意:sort()、rsort()、asort()、arsort()、ksort() 和 krsort()都是用来对关联数组进行排序的,它们会改变原数组的顺序。但是 usort()、uasort() 和 uksort()则允许使用自定义的比较函数来决定排序逻辑,适用于更复杂的排序需求。
当使用sort()函数对数组进行排序时,它会按照升序对数组进行排序:
<?php // 创建一个数组 $numbers = array(4, 2, 8, 1, 5); // 使用sort()函数对数组进行排序 sort($numbers); // 打印排序后的数组 print_r($numbers); ?>
运行以上代码,输出将会是:
Array ( [0] => 1 [1] => 2 [2] => 4 [3] => 5 [4] => 8 )
可以看到,数组已经按照升序进行了排序。sort()函数会直接修改原始数组,并在原地进行排序。如果你希望保留原始数组不变,可以使用rsort()函数进行降序排序。
<?php $fruits = array("apple", "banana", "orange", "grape"); asort($fruits); foreach ($fruits as $key => $value) { echo "$key : $value <br>"; } ?>
输出结果为:
1 : banana 0 : apple 2 : orange 3 : grape
ksort() 函数用于对数组按照键名进行排序,案例代码:
<?php // 创建一个数组 $array = array( "key3" => "value3", "key1" => "value1", "key2" => "value2" ); // 使用 ksort() 对数组按照键名进行排序 ksort($array); // 打印排序后的数组 foreach ($array as $key => $value) { echo $key . " => " . $value . "<>"; } ?>
输出结果将会是:
key1 => value1 key2 => value2 key3 => value3
在这个例子中,ksort()函数首先会比较数组中的键名,然后按照键名的 ASCII 值进行升序排序。在这个排序过程中,数组中的元素顺序可能会改变,但键名和它们对应的值将会按照键名的顺序排列。
在PHP中,usort(), uasort(), 和uksort()函数都可以用来对数组进行排序,但它们之间有一些区别。上面已经为大家介绍过了, usort()函数根据用户自定义的比较函数来对数组进行排序;uasort()函数也是用用户自定义的比较函数对数组进行排序,但它保持索引与值之间的关联。uksort()函数根据键进行排序,同样使用用户自定义的比较函数。
<?php // 示例数组 $array1 = array( "a" => "apple", "b" => "banana", "g" => "grape", "m" => "mango" ); // usort() 案例 - 根据值排序 usort($array1, function($a, $b) { return strlen($a) <=> strlen($b); // 根据字符串长度进行排序 }); print_r($array1); // uasort() 案例 - 根据值排序,保持索引与值之间的关联 uasort($array1, function($a, $b) { return strlen($a) <=> strlen($b); // 根据字符串长度进行排序 }); print_r($array1); // uksort() 案例 - 根据键排序 uksort($array1, function($a, $) { return strcmp($a, $b); // 根据键的字符串进行排序 }); print_r($array1); ?>
下面是运行效果:
使用 usort()`函数排序后的数组:
Array ( [0] => apple [2] => banana [1] => grape [3] => mango )
使用 uasort()`函数排序后的数组:
Array ( [0] => apple [3] => banana [1] => grape [2] => mango )
使用uksort()函数排序后的数组:
Array ( [mango] => Array ( [0] => mango ) [grape] => Array ( [0] => grape ) [banana] => Array ( [0] => banana ) [apple] => Array ( [0] => apple ) )
这个脚本展示了如何使用用户定义的回调函数来排序数组。对于usort()和uasort(),我们比较字符串的长度来决定顺序;对于uksort(),我们比较键本身。执行这段代码,你将得到每个函数按照自己规则排序后的数组输出。可以看到,usort()根据字符串长度对数组进行了排序,则不保证键与值之间的关联;而uasort()则保持了索引与值之间的关联。uksort()则完全根据键本身进行了排序,与值无关。
对于二维数组,PHP 没有直接的函数进行排序,但可以使用array_multisort()函数,该函数可以对多个数组进行排序,或者对数组的多个维度进行排序。此外,也可以使用array_column()函数配合usort()等函数来实现对二维数组按照某一字段进行排序。
在学习PHP对二维数组进行排序的方法前,我们先来认识一下array_multisort()函数。array_multisort()函数用于对多个数组或多维数组进行排序。该函数可以接受多个数组作为参数,并根据这些数组的值进行排序,从而在最终结果中使对应的值保持关联。
定义:bool array_multisort ( array &$array1 [, mixed $array1_sort_order = SORT_ASC [, mixed $array1_sort_flags = SORT_REGULAR [, mixed $... ]]] )
参数说明:
array1: 必需,要排序的第一个数组。
array1_sort_order: 可选,用于指定排序顺序,可以是SORT_ASC(升序)或SORT_DESC(降序)。默认为SORT_ASC。
array1_sort_flags: 可选,用于指定排序规则,可以是SORT_REGULAR(常规比较)、SORT_NUMERIC(数值比较)、SORT_STRING(字符串比较)、SORT_LOCALE_STRING(基于当前区域设置的字符串比较)。默认为SORT_REGULAR。
...可选,可以继续添加更多的数组参数。
返回值:如果排序成功,则返回true;否则返回false。
如需要将以下$data数组按照第二维的字段score进行排序,则可以按如下代码:
<?php $data = [ ['name' => '张三', 'age' => '20', 'score' => '78'], ['name' => '李四', 'age' => '21', 'score' => '78'], ['name' => '王五', 'age' => '20', 'score' => '60'], ['name' => '大强子', 'age' => '26', 'score' => '100'] ]; array_multisort(array_column($data, 'score'), SORT_DESC, $data); echo '<pre>';print_r($data); ?>
这里的DESC是降序,ASC是升序。打印结果如下:
Array ( [0] => Array ( [name] => 大强子 [age] => 26 [score] => 100 ) [1] => Array ( [name] => 张三 [age] => 20 [score] => 78 ) [2] => Array ( [name] => 李四 [age] => 21 [score] => 78 ) [3] => Array ( [name] => 王五 [age] => 20 [score] => 60 ) )
<?php $data = [ ['name' => '张三', 'age' => '20', 'score' => '78'], ['name' => '李四', 'age' => '21', 'score' => '78'], ['name' => '王五', 'age' => '20', 'score' => '60'], ['name' => '大强子', 'age' => '26', 'score' => '100'] ]; // 将数据根据 age 升序排列,根据 score 降序排列 array_multisort(array_column($data, 'age'), SORT_ASC, array_column($data, 'score'), SORT_DESC, $data); echo '<pre>';print_r($data); ?>
打印结果如下:
Array ( [0] => Array ( [name] => 张三 [age] => 20 [score] => 78 ) [1] => Array ( [name] => 王五 [age] => 20 [score] => 60 ) [2] => Array ( [name] => 李四 [age] => 21 [score] => 78 ) [3] => Array ( [name] => 大强子 [age] => 26 [score] => 100 ) )
提示:array_column(数组, 数组中的某个键值) 从二维维数组中取出某个键值的一列 返回一个一维数组;array_multisort() 可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序。关联(string)键名保持不变,但数字键名会被重新索引。
由于部分虚拟主机用户建设违法网页,导致原IP被封禁,请及时解析域名到新的IP地址:45.15.10.56!同时遵守我国法律法规,并保留将相关传播违法信息者的联系信息提供给警方的权利!
分享:
支付宝
微信