用PHP把数据放在一个数组里是好的,但是顺序可能会不一致。
在这种情况下可以使用排序函数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 函数,用于排序以使数组键不变。
让我们稍微更改一下 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函数,一个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数组使用比较函数对数组进行重新排序的全部内容 。
请运行示例代码,加深理解。
评论列表:
发布于 4天前回复该评论
发布于 3天前回复该评论
发布于 3天前回复该评论
发布于 3天前回复该评论
发布于 3天前回复该评论