PHP Exercises: Sort a collection of given arrays or objects by key
PHP: Exercise-93 with Solution
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:
PHP Code Editor:
Have another way to solve this solution? Contribute your code (and comments) through Disqus.
Previous: Write a PHP program to filter out the elements of an given array, that have one of the specified values.
Next: Write a PHP program to check if two numbers are approximately equal to each other.
What is the difficulty level of this exercise?
Test your Programming skills with w3resource's quiz.
It will be nice if you may share this link in any developer community or anywhere else, from where other developers may find this content. Thanks.
https://www.w3resource.com/php-exercises/php-basic-exercise-93.php
- Weekly Trends and Language Statistics
- Weekly Trends and Language Statistics