首页 > 后端开发 > php教程 > 如何使用灵活且可重用的函数在 PHP 中对多维数组进行排序?

如何使用灵活且可重用的函数在 PHP 中对多维数组进行排序?

Patricia Arquette
发布: 2025-01-01 07:29:09
原创
451 人浏览过

How to Sort Multidimensional Arrays in PHP Using a Flexible and Reusable Function?

如何在 PHP 中对多维数组进行排序

介绍 PHP 5.3 的通用解决方案

实现:

function make_comparer() {
    // Normalize criteria up front
    $criteria = func_get_args();
    foreach ($criteria as $index => $criterion) {
        $criteria[$index] = is_array($criterion)
            ? array_pad($criterion, 3, null)
            : array($criterion, SORT_ASC, null);
    }

    return function($first, $second) use (&$criteria) {
        foreach ($criteria as $criterion) {
            list($column, $sortOrder, $projection) = $criterion;
            $sortOrder = $sortOrder === SORT_DESC ? -1 : 1;

            if ($projection) {
                $lhs = call_user_func($projection, $first[$column]);
                $rhs = call_user_func($projection, $second[$column]);
            } else {
                $lhs = $first[$column];
                $rhs = $second[$column];
            }

            if ($lhs < $rhs) {
                return -1 * $sortOrder;
            } elseif ($lhs > $rhs) {
                return 1 * $sortOrder;
            }
        }

        return 0; // tiebreakers exhausted
    };
}
登录后复制

高级功能:

(1) 多重排序列:

usort($data, make_comparer('number', 'name'));
登录后复制

(2) 反向排序:

usort($data, make_comparer(['name', SORT_DESC]));
登录后复制

(3) 自定义投影:

usort($data, make_comparer(['birthday', SORT_ASC, 'date_create']));
登录后复制

(4) 组合特点:

usort($data, make_comparer(
    ['number', SORT_DESC],
    ['birthday', SORT_ASC, 'date_create']
));
登录后复制

优点:

  • 可重复使用
  • Fl灵活
  • 可逆
  • 可扩展
  • 关联

以上是如何使用灵活且可重用的函数在 PHP 中对多维数组进行排序?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板