最新公告
  • 欢迎您光临码农资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!加入我们
  • PHP数组多维排序实战:从简单到复杂场景

    多维数组排序可分为单列排序和嵌套排序。单列排序可使用 array_multisort() 函数按列排序;嵌套排序需要递归函数遍历数组并排序。实战案例包括按产品名称排序和按销售量和价格复合排序。

    PHP数组多维排序实战:从简单到复杂场景

    PHP 数组多维排序实战:从简单到复杂场景

    引言

    在 PHP 中,对多维数组进行排序通常是一项复杂的任务。本教程将引导你逐步了解如何根据不同的场景进行多维数组排序,从简单的单列排序到复杂的嵌套排序。

    单列排序

    最简单的多维数组排序是根据单列进行排序。你可以使用 array_multisort() 函数:

    $arr = [
        ['id' => 1, 'name' => 'John Doe'],
        ['id' => 3, 'name' => 'Jane Smith'],
        ['id' => 2, 'name' => 'Bob Johnson'],
    ];
    
    array_multisort(array_column($arr, 'id'), SORT_ASC, $arr);
    
    print_r($arr);
    // 输出:
    // Array
    // (
    //     [0] => Array
    //         (
    //             [id] => 1
    //             [name] => John Doe
    //         )
    //     [1] => Array
    //         (
    //             [id] => 2
    //             [name] => Bob Johnson
    //         )
    //     [2] => Array
    //         (
    //             [id] => 3
    //             [name] => Jane Smith
    //         )
    // )

    嵌套数组排序

    对于嵌套数组,你需要使用递归函数来遍历数组并对其进行排序:

    function sortNestedArray($arr, $col, $order) {
        if (!is_array($arr)) {
            return $arr;
        }
    
        uasort($arr, function($a, $b) use ($col, $order) {
            if ($a[$col] == $b[$col]) {
                return 0;
            }
    
            return ($a[$col] < $b[$col]) ? -1 : 1;
        });
    
        foreach ($arr as &$item) {
            if (is_array($item)) {
                $item = sortNestedArray($item, $col, $order);
            }
        }
    
        return $arr;
    }

    实战案例

    案例 1:按产品名称对嵌套数组进行排序

    $products = [
        ['id' => 1, 'name' => 'Apple', 'price' => 10],
        ['id' => 2, 'name' => 'Orange', 'price' => 15],
        ['id' => 3, 'name' => 'Banana', 'price' => 5],
    ];
    
    $sortedProducts = sortNestedArray($products, 'name', SORT_ASC);
    
    // ... 处理排序后的数组 ...

    案例 2:按销售量和价格对嵌套数组进行复合排序

    $salesData = [
        ['product' => 'Apple', 'count' => 10, 'price' => 10],
        ['product' => 'Orange', 'count' => 15, 'price' => 15],
        ['product' => 'Banana', 'count' => 5, 'price' => 5],
    ];
    
    usort($salesData, function($a, $b) {
        if ($a['count'] == $b['count']) {
            return ($a['price'] < $b['price']) ? -1 : 1;
        }
    
        return ($a['count'] < $b['count']) ? 1 : -1;
    });
    
    // ... 处理排序后的数据 ...
    想要了解更多内容,请持续关注码农资源网,一起探索发现编程世界的无限可能!
    本站部分资源来源于网络,仅限用于学习和研究目的,请勿用于其他用途。
    如有侵权请发送邮件至1943759704@qq.com删除

    码农资源网 » PHP数组多维排序实战:从简单到复杂场景
    • 7会员总数(位)
    • 25846资源总数(个)
    • 0本周发布(个)
    • 0 今日发布(个)
    • 294稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情