PHP中的usort,uasort,uksort

usort,uasort,uksort可以使用用户自定义的函数来对数组中的值来排序,首先定义一个简单二维的数组

$arr = array(
array(‘key1’ => 500, ‘key2’

usort,uasort,uksort可以使用用户自定义的函数来对数组中的值来排序,首先定义一个简单二维的数组

$arr = array(
array(‘key1’ => 500, ‘key2’ => ‘这是500’),
array(‘key1’ => 299, ‘key2’ => ‘这是299’),
array(‘key1’ => 999, ‘key2’ => ‘这是999’),
);

这是输出的数组的结构图

1
再来定义一个自定义的排序函数my_sort,这段代码很简单,$x和$y是传进来的要比较的两个数组,这里只比较这两个数组key1对应的值  

function my_sort($x, $y) {
echo $x[‘key1’] . ‘ 和 ‘ . $y[‘key1’] . ‘
‘;//输出是哪两个key1在进行比较
if ($x[‘key1’] > $y[‘key1’]) {
return true;
} else if ($x[‘key1’] < $y[‘key1’]) {
return false;
} else {
return 0;
}
}

1.usort
usort并不会保存关键字,这句话的意思在看了结果的截图就明白了。
这是使用usort的代码,第二个参数为你自定义的排序函数

usort($arr, ‘my_sort’);
echo ‘usort排序后:’.’
‘;
print_r($arr);

结果:
很明显排序之前关键字为0的是500,使用usort之后500变成了299,usort并没有保留关键字。

2.uasort
usort并不会保存关键字,但是uasort会保留关键字。这是使用uasort的代码,第二个参数为你自定义的排序函数

uasort($arr, ‘my_sort’);
echo ‘uasort排序后:’.’
‘;
print_r($arr);

结果:
排序之前关键字为0的是500,使用uasort之后0对应还是500,只是关键字0的位置变化了。

3.uksort
这个是根据用户自定义的排序规则对关键字进行排序。这个时候上面写的自定义排序函数已经没用了,来重新写一个my_uksort,这个是对关键字进行倒序排序

function my_uksort($x, $y) {
echo $x . ‘ 和 ‘ . $y . ‘
‘;
if ($x > $y) {
return false;
} else if ($x < $y) {
return true;
} else {
return 0;
}
}

使用方式和上面一样

uksort($arr, ‘my_uksort’);
echo ‘uksort排序后:’ . ‘
‘;
print_r($arr);

结果:很明显,数组的顺序变为2,1,0了。