PHP 数组(array)自定义排序

php提供的数组自定义排序函数

uasort使用用户自定义的比较函数对数组中的值进行排序并保持索引关联
bool uasort(array &$array,callable $cmp_function)
uksort()使用用户自定义的比较函数对数组中的键名进行排序
usort()使用用户自定义的比较函数对数组中的值进行排序

相关例子:
对三维数组进行排序

function cmp($a, $b){
    return strcmp($a["fruit"], $b["fruit"]);}
    
$fruits[0]["fruit"] = "lemons";
$fruits[1]["fruit"] = "apples";
$fruits[2]["fruit"] = "grapes";
usort($fruits, "cmp");
print_r($fruits);
//输出结果:
Array(
    [0] => Array([fruit] => apples)
    [1] => Array([fruit] => grapes)
    [2] => Array([fruit] => lemons))

以对象作为回调函数对数组进行排序

class Obj{
    var $letter;
    function Obj($letter){
        $this->letter = $letter;
    }
    //静态的 比较函数
    static function cmp_obj($a,$b){
        $a = strtolower($a -> name);
        $b = strtolower($b -> name);
        if($a == $b){
            return 0;
        }
        return ($a > $b) ? 1: -1;
    }
}
$a[] = new TestObj("f");
$a[] = new TestObj("h");
$a[] = new TestObj("z");

usort($a, array("TestObj", "cmp_obj"));
var_dump($a);
//输出结果
array(3) {
  [0]=> object(TestObj)#1 (1) {
    ["name"]=> string(1) "f"}
  [1]=> object(TestObj)#2 (1) {
    ["name"]=> string(1) "h" }
  [2]=> object(TestObj)#3 (1) {
    ["name"]=> string(1) "z" }
}

将数组以另一个数组的顺序进行排序

$arrayList = array("拜年","过年好","happy new year","鸡年","红包","QQ",
"Logo","富贵双全","健康快乐","开工利");
$newYear = array( "鸡年","过年好","红包","QQ","Logo","拜年","happy new year",
"开工利","富贵双全","健康快乐");    
usort($newYear,function($a,$b) use($arrayList){
    $indexB = array_search($b,$arrayList);
    $indexA = array_search($a,$arrayList);
    if($indexA == $indexB){
        return 0;
    }
    return $indexA < $indexB ? -1 :1;
});
var_dump($newYear);
//输出结果:
array(10) {
  [0]=>string(6) "拜年"
  [1]=>string(9) "过年好"
  [2]=>string(14) "happy new year"
  [3]=>string(6) "鸡年"
  [4]=>string(6) "红包"
  [5]=>string(2) "QQ"
  [6]=>string(4) "Logo"
  [7]=>string(12) "富贵双全"
  [8]=>string(12) "健康快乐"
  [9]=>string(9) "开工利"
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值