w3resource

PHP Exercises: Sort a collection of given arrays or objects by key


93. Sort Collection by a Specific Key

Write a PHP program to sort a collection of given arrays or objects by key.

Sample Solution:

PHP Code:

<?php
// Licence: https://bit.ly/2CFA5XY

// Function definition for 'orderBy' that takes an array of items, an attribute, and an order ('asc' or 'desc') as parameters
function orderBy($items, $attr, $order)
{
    // Initialize an empty associative array to store the items with keys based on the specified attribute
    $sortedItems = [];

    // Iterate through each item in the array
    foreach ($items as $item) {
        // Determine the key based on whether the item is an object or an array
        $key = is_object($item) ? $item->{$attr} : $item[$attr];

        // Assign the item to the associative array using the calculated key
        $sortedItems[$key] = $item;
    }

    // Check if the order is 'desc' and use 'krsort' to sort the array in descending order based on keys
    // If the order is not 'desc', use 'ksort' to sort the array in ascending order based on keys
    if ($order === 'desc') {
        krsort($sortedItems);
    } else {
        ksort($sortedItems);
    }

    // Use 'array_values' to reindex the array after sorting
    return array_values($sortedItems);
}

// Call 'orderBy' with an array of associative arrays, an attribute ('id'), and an order ('desc')
// Display the result using 'print_r'
print_r(orderBy(
    [
        ['id' => 2, 'name' => 'Red'],
        ['id' => 3, 'name' => 'Black'],
        ['id' => 1, 'name' => 'Green']
    ],
    'id',
    'desc'
));
?>

Explanation:

  • Function Definition:
    • The orderBy function accepts three parameters:
      • $items: an array of items to sort.
      • $attr: the attribute to sort by.
      • $order: the sort order, either 'asc' (ascending) or 'desc' (descending).
  • Initialize Sorted Array:
    • An empty array $sortedItems is created to store the items, with keys set to the values of the specified $attr.
  • Build Associative Array with Attribute-Based Keys:
    • The function iterates through each item in $items.
    • It retrieves the attribute value ($attr) to use as a key:
      • If the item is an object, the property is accessed using $item->{$attr}.
      • If it’s an array, the key is accessed as $item[$attr].
    • Each item is added to $sortedItems, keyed by the attribute value.
  • Sort the Array:
    • The array is sorted based on the $order parameter:
      • If $order is 'desc', krsort is used to sort keys in descending order.
      • Otherwise, ksort is used to sort keys in ascending order.
  • Reindex the Array:
    • After sorting, array_values reindexes $sortedItems to make it a standard numerically indexed array.
  • Return Sorted Array:
    • The sorted, reindexed array is returned.
  • Function Call and Output:
    • orderBy is called with an array of associative arrays, specifying id as the sorting attribute and 'desc' as the order.
    • The result, printed with print_r, displays items sorted by 'id' in descending order.

Output:

Array
(
    [0] => Array
        (
            [id] => 3
            [name] => Black
        )

    [1] => Array
        (
            [id] => 2
            [name] => Red
        )

    [2] => Array
        (
            [id] => 1
            [name] => Green
        )

)

Flowchart:

Flowchart: Sort a collection of given arrays or objects by key.

For more Practice: Solve these Related Problems:

  • Write a PHP script to sort a collection of associative arrays by a specified key using usort.
  • Write a PHP function to order an array of objects based on a given property in ascending order.
  • Write a PHP script to implement a custom sorting routine that arranges arrays by a particular key.
  • Write a PHP script to sort multidimensional arrays by key while preserving the original array structure.

Go to:


PREV : Filter Array to Exclude Specified Values.
NEXT : Approximately Equal Number Check.

PHP Code Editor:



Have another way to solve this solution? Contribute your code (and comments) through Disqus.

>

What is the difficulty level of this exercise?

Test your Programming skills with w3resource's quiz.



Follow us on Facebook and Twitter for latest update.