Home > Backend Development > PHP Tutorial > How Can I Sort a Multidimensional PHP Array by a Subarray's Value?

How Can I Sort a Multidimensional PHP Array by a Subarray's Value?

Linda Hamilton
Release: 2024-12-07 05:42:14
Original
845 people have browsed it

How Can I Sort a Multidimensional PHP Array by a Subarray's Value?

Sorting an Array by Subarray Value in PHP

Ordering data structures is a common programming task, and arrays are frequently used to store and manage collections of information. In PHP, arrays can contain nested structures, including arrays as values. Sorting multidimensional arrays can be useful for various reasons, such as organizing data or extracting specific elements.

Problem Statement:

Consider the following array structure:

$array = [
    [
        'configuration_id' => 10,
        'id' => 1,
        'optionNumber' => 3,
        'optionActive' => 1,
        'lastUpdated' => '2010-03-17 15:44:12'
    ],
    [
        'configuration_id' => 9,
        'id' => 1,
        'optionNumber' => 2,
        'optionActive' => 1,
        'lastUpdated' => '2010-03-17 15:44:12'
    ],
    [
        'configuration_id' => 8,
        'id' => 1,
        'optionNumber' => 1,
        'optionActive' => 1,
        'lastUpdated' => '2010-03-17 15:44:12'
    ],
];
Copy after login

The goal is to sort this array in an incremental way based on the 'optionNumber' key, resulting in the following:

$sortedArray = [
    [
        'configuration_id' => 8,
        'id' => 1,
        'optionNumber' => 1,
        'optionActive' => 1,
        'lastUpdated' => '2010-03-17 15:44:12'
    ],
    [
        'configuration_id' => 9,
        'id' => 1,
        'optionNumber' => 2,
        'optionActive' => 1,
        'lastUpdated' => '2010-03-17 15:44:12'
    ],
    [
        'configuration_id' => 10,
        'id' => 1,
        'optionNumber' => 3,
        'optionActive' => 1,
        'lastUpdated' => '2010-03-17 15:44:12'
    ],
];
Copy after login

Solution:

To sort the array, we can utilize PHP's usort function. usort takes two arguments: the array to be sorted, and a comparison function that determines the ordering of the elements. The comparison function should return a negative value if the first element should come before the second, zero if they are equivalent, and a positive value if the first element should come after the second.

In this case, our comparison function can be defined as follows:

function cmp_by_optionNumber($a, $b) {
  return $a['optionNumber'] - $b['optionNumber'];
}
Copy after login

This function subtracts the 'optionNumber' value of the first array from the second, resulting in a negative value if the first element should come before the second, a zero value if they are equal, and a positive value if the first element should come after the second.

To use this comparison function with usort, we simply pass it as the second argument:

usort($array, 'cmp_by_optionNumber');
Copy after login

This will sort the array in-place, modifying the original $array variable to reflect the sorted order. The resulting $array variable will be identical to the $sortedArray example provided earlier.

Alternative Syntax:

In PHP versions 5.3 and later, an anonymous function can be used instead of the named comparison function:

usort($array, function ($a, $b) {
  return $a['optionNumber'] - $b['optionNumber'];
});
Copy after login

PHP 7.0 and Above:

In PHP versions 7.0 and above, the spaceship operator <=> can be used instead of subtraction in the comparison function to prevent overflow/truncation problems:

usort($array, function ($a, $b) {
  return $a['optionNumber'] <=> $b['optionNumber'];
});
Copy after login

The above is the detailed content of How Can I Sort a Multidimensional PHP Array by a Subarray's Value?. For more information, please follow other related articles on the PHP Chinese website!

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
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template