PHP sort() Function

PHP

PHP sort() - Sort Array

Sorting arrays is a common task in PHP development. The sort() function provides a straightforward way to sort arrays in ascending order while reindexing numeric keys. In this tutorial, you will learn how to use the sort() function effectively with practical examples, best practices, and considerations for array sorting in PHP.

Prerequisites

  • Basic understanding of PHP syntax
  • Familiarity with arrays in PHP
  • Access to a PHP development environment (local server or live server)

Setup

To follow along, make sure you have a PHP runtime set up on your machine. You can use tools like XAMPP, MAMP, or run PHP directly via the command line.

Create a PHP file, e.g., sort-example.php, and open it in your preferred code editor.

What is the PHP sort() Function?

The PHP sort() function sorts an array in ascending order. It reindexes the array numerically starting from zero. This is useful for simple sorting scenarios where key association is not needed to be preserved.

Function signature:

bool sort(array &$array [, int $sort_flags = SORT_REGULAR ])

Parameters:

  • $array: The input array passed by reference which will be sorted.
  • $sort_flags: Optional parameter to define sorting behavior (e.g., numeric, string). Defaults to SORT_REGULAR.

Returns: TRUE on success, FALSE on failure.

Explained Examples

Example 1: Sorting a simple numeric array

<?php
$numbers = [4, 2, 8, 1, 5];
sort($numbers);

print_r($numbers);
?>

Output:

Array
(
    [0] => 1
    [1] => 2
    [2] => 4
    [3] => 5
    [4] => 8
)

Explanation: The numeric array is sorted in ascending order. Note the numeric keys are reindexed starting from zero.

Example 2: Sorting a string array

<?php
$fruits = ["banana", "apple", "grape", "orange"];
sort($fruits);

print_r($fruits);
?>

Output:

Array
(
    [0] => apple
    [1] => banana
    [2] => grape
    [3] => orange
)

Strings are sorted in ascending alphabetical order with numeric keys reset.

Example 3: Sorting numeric strings with numeric sort flag

<?php
$values = ["10", "2", "30", "22"];
sort($values, SORT_NUMERIC);

print_r($values);
?>

Output:

Array
(
    [0] => 2
    [1] => 10
    [2] => 22
    [3] => 30
)

Using the SORT_NUMERIC flag ensures numeric comparison rather than string comparison.

Best Practices

  • Use sort() when you want to sort values and reset numeric keys.
  • For associative arrays where keys must be preserved, prefer other functions like asort() or ksort().
  • Use the appropriate $sort_flags (e.g., SORT_NUMERIC, SORT_STRING) for correct sorting behavior.
  • Remember sort() modifies the original array as it sorts by reference.
  • Check return value to detect if sorting was successful.

Common Mistakes

  • Expecting the original keys to be preserved — sort() always reindexes numeric keys.
  • Not passing the array by reference — the array must be passed by reference for sorting to affect the original.
  • Ignoring type when sorting numeric strings, leading to unexpected string comparison results.
  • Using sort() on associative arrays when key preservation is required.
  • Forgetting to handle sorting flags when necessary, such as numeric or case-insensitive sorting.

Interview Questions

Junior-Level

  • Q1: What does the PHP sort() function do?
    A1: It sorts an array in ascending order and reindexes numeric keys starting from zero.
  • Q2: Does sort() preserve the original keys of an array?
    A2: No, sort() reindexes the array's numeric keys.
  • Q3: How do you call sort() on an array?
    A3: By passing the array variable to sort(), which sorts it in place.
  • Q4: What is the default sorting behavior of sort()?
    A4: It sorts the array with SORT_REGULAR flag, comparing items normally.
  • Q5: What happens if you do not pass the array by reference to sort()?
    A5: The array will not be sorted because sort() requires a reference to modify it.

Mid-Level

  • Q1: How can you sort an array of numbers stored as strings numerically?
    A1: Use sort() with the SORT_NUMERIC flag to ensure numeric sorting.
  • Q2: When should you not use sort() for array sorting?
    A2: When you need to preserve the association between keys and values, use asort() instead.
  • Q3: What is the difference between sort() and rsort()?
    A3: sort() sorts the array in ascending order, while rsort() sorts in descending order, both reindex numeric keys.
  • Q4: How does sort() behave with multidimensional arrays?
    A4: sort() compares elements using the SORT_REGULAR flag by default, but sorting multidimensional arrays may require custom logic or usort().
  • Q5: Can sort() sort an array of objects?
    A5: sort() can sort arrays of objects but relies on internal comparison of objects; to customize, use usort() with callback.

Senior-Level

  • Q1: Explain how sort() reindexes an array internally in PHP.
    A1: sort() rebuilds the array's internal hash table resetting all numeric keys from zero while ordering values ascending, discarding original keys.
  • Q2: How would you handle locale-aware sorting in PHP if sort() does not support it natively?
    A2: Use collator_asort() from the Intl extension for locale-aware sorting while preserving keys.
  • Q3: Discuss the performance implications of using sort() with large arrays.
    A3: sort() uses an efficient Quicksort implementation internally, but sorting very large arrays can consume time and memory; consider alternatives like external sorting or partial sort if applicable.
  • Q4: How does sort() handle sorting arrays with mixed data types?
    A4: By default, sort() uses SORT_REGULAR which compares items normally; type juggling may lead to unexpected order, so explicit flags or custom sorting may be necessary.
  • Q5: Can sort() be safely used in multithreaded environments?
    A5: PHP is generally single-threaded; sort() is safe in that context. In multithreaded PHP environments (e.g., using pthreads), user must ensure no concurrent modifications to the same array occur without synchronization.

FAQ

  • Q: Does sort() preserve key-value pairs in associative arrays?
    A: No, sort() reindexes numeric keys and does not preserve associations. Use asort() to maintain key-value pairs.
  • Q: How to sort arrays in descending order?
    A: Use rsort() to sort an array in descending order and reindex numeric keys.
  • Q: Is sort() case-sensitive when sorting strings?
    A: Yes, sort() by default is case-sensitive. For case-insensitive sorting, use natcasesort() or usort() with a custom comparator.
  • Q: Can you sort multidimensional arrays with sort()?
    A: Not directly. You might need to use usort() with a custom callback to sort multidimensional arrays.
  • Q: How to keep keys when sorting an array?
    A: Use asort() or ksort() to sort the array while maintaining key association.

Conclusion

The sort() function is a fundamental PHP array function designed to sort arrays in ascending order while reindexing numeric keys. It's ideal for simple sorting tasks where preserving keys is not required. Understanding its behavior, including key reindexing and sorting flags like SORT_NUMERIC, will help you avoid common pitfalls. For associative arrays or complex data, consider related functions or custom sorting techniques. Practice the examples in this tutorial to master the use of sort() and improve your array manipulation skills in PHP.