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
Linda HamiltonOriginal
2024-12-07 05:42:14891browse

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'
    ],
];

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'
    ],
];

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'];
}

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

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'];
});

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'];
});

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!

Statement:
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