"If a worker wants to do his job well, he must first sharpen his tools." - Confucius, "The Analects of Confucius. Lu Linggong"
Front page > Programming > PHP multi-dimensional array sorting method by subarray value

PHP multi-dimensional array sorting method by subarray value

Posted on 2025-04-30
Browse:802

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

Disclaimer: All resources provided are partly from the Internet. If there is any infringement of your copyright or other rights and interests, please explain the detailed reasons and provide proof of copyright or rights and interests and then send it to the email: [email protected] We will handle it for you as soon as possible.

Copyright© 2022 湘ICP备2022001581号-3