PHP array multi-dimensional sorting practice: from simple to complex scenarios

WBOY
Release: 2024-04-29 21:12:02
Original
821 people have browsed it

Multidimensional array sorting can be divided into single column sorting and nested sorting. Single column sorting can use the array_multisort() function to sort by columns; nested sorting requires a recursive function to traverse the array and sort. Practical cases include sorting by product name and compound sorting by sales volume and price.

PHP array multi-dimensional sorting practice: from simple to complex scenarios

PHP array multi-dimensional sorting practice: from simple to complex scenarios

Introduction

In PHP, sorting multidimensional arrays is usually a complex task. This tutorial will guide you step-by-step through how to sort multi-dimensional arrays based on different scenarios, from simple single-column sorting to complex nested sorting.

Single column sort

The simplest multidimensional array sort is to sort based on a single column. You can use array_multisort() Function:

$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
//         )
// )
Copy after login

Nested array sort

For nested arrays, you need to use a recursive function to traverse the array And sort them:

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;
}
Copy after login

Practical case

Case 1: Sort nested array by product name

$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);

// ... 处理排序后的数组 ...
Copy after login

Case 2: Compound sorting of nested arrays by sales volume and price

$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;
});

// ... 处理排序后的数据 ...
Copy after login

The above is the detailed content of PHP array multi-dimensional sorting practice: from simple to complex scenarios. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template