用PHP把数据放在一个数组里是好的,但是顺序可能会不一致。
在这种情况下可以使用排序函数usort。
用usort进行排序
usort 是一个回调函数。
指定另一个函数作为函数的参数。
然后,通过比较另一个指定函数的结果来实现排序。
用于对多维数组(而不是一维数组)进行排序。
让我们通过样例代码来看看它的实际动作。
注释中的数字是为了稍后解释。
<?php function sort_test($right, $left){ // ② return strcmp($right["sports"], $left["sports"]); // ③ } $sports[0]['sports'] = 'tennis'; $sports[1]['sports'] = 'baseball'; $sports[2]['sports'] = 'swimming'; usort($sports, "sort_test"); // ① echo "<pre>"; print_r($sports); echo "</pre>"; ?>
执行结果
Array ( [0] => Array ( [sports] => baseball ) [1] => Array ( [sports] => swimming ) [2] => Array ( [sports] => tennis ) )
tennis→tennis→swimming的排列被重新排列为baseball→swimming→tennis。
程序的流程是
将要排序的数据放入数组中
↓
用usort调用函数
↓
与函数比较并排序
现在让我们解释一下代码。
① 用usort调用一个函数
指定要排序的数组作为第一个参数,函数名作为第二个参数。
②给被调用函数设置参数
我正在设置 $right 和 $left 变量,它们是什么?
它没有出现在任何地方。
事实上,第一个和第二个参数中的变量名称并不重要。
这是要自动比较的数组数据。
③与strcmp比较
strcmp是PHP的比较函数。
比较结果返回的值有如下不同。
当第一个参数<第二个参数时返回负整数
当第一个参数>第二个参数时返回正整数
当第一个参数=第二个参数时返回0
用usort调用的函数的返回值必须是负整数、正整数或 0。
需要注意的是用usort排序的结果是数组的key也被排序改变了。
不改变键值排序(uasort函数)
这是 uasort 函数,用于排序以使数组键不变。
让我们稍微更改一下 usort 示例代码并查看结果。
<?php function sort_test($right, $left){ return strcmp($right["sports"], $left["sports"]); } $sports[0]['sports'] = 'tennis'; $sports[1]['sports'] = 'baseball'; $sports[2]['sports'] = 'swimming'; usort($sports, "sort_test"); // usort更改为uasort echo "<pre>"; print_r($sports); echo "</pre>"; ?>
执行结果
Array ( [1] => Array ( [sports] => baseball ) [2] => Array ( [sports] => swimming ) [0] => Array ( [sports] => tennis ) )
比较值的顺序已重新排列。
并且数组的键仍然是原始值。
当您不想更改数组键时使用它。
按键排序(uksort函数)
接下来介绍一下uksort函数,一个key排序的函数。
同样的,我们把usort示例代码稍微改一下,看看结果。
<?php function sort_test($right, $left){ return strcmp($right, $left); } $sports[6]['sports'] = 'tennis'; $sports[4]['sports'] = 'baseball'; $sports[0]['sports'] = 'swimming'; uksort($sports, "sort_test"); // usort更改为uksort echo "<pre>"; print_r($sports); echo "</pre>"; ?>
执行结果
Array ( [0] => Array ( [sports] => swimming ) [4] => Array ( [sports] => baseball ) [6] => Array ( [sports] => tennis ) )
可以看到结果按键名对数组进行排序。
结语
以上就是关于PHP数组使用比较函数对数组进行重新排序的全部内容 。
请运行示例代码,加深理解。