Implementing Stable Sort
Learn about the key differences between stable and unstable sorts and how to implement a stable sort.
When designing the logic for array sorting, the original PHP developers sacrificed stability for speed. At the time, this was considered a reasonable sacrifice. However, if complex objects are involved in the sorting process, a stable sort is needed.
In this lesson, we’ll discuss what stable sort is and why it’s important. If we can ensure that data is stably sorted, our application code will produce more accurate output, which results in greater customer satisfaction. Before we get into the details of how PHP 8 enables stable sorting, we first need to define what a stable sort is.
Understanding stable sorts
When the values of properties used for the purposes of a sort are equal, in a stable sort, the original order of elements is guaranteed. Such a result is closer to user expectations. Let’s have a look at a simple dataset and determine what would comprise a stable sort. For the sake of illustration, let’s assume our dataset includes entries for access time and username:
2021-06-01 11:11:11 Betty2021-06-03 03:33:33 Betty2021-06-01 11:11:11 Barney2021-06-02 02:22:22 Wilma2021-06-01 11:11:11 Wilma2021-06-03 03:33:33 Barney2021-06-01 11:11:11 Fred
If we wish to sort by time, we will note right away that there are duplications for 2021-06-01 11:11:11
. If we were to perform a stable sort on this dataset, the expected outcome would appear as follows:
2021-06-01 11:11:11 Betty2021-06-01 11:11:11 Barney2021-06-01 11:11:11 Wilma2021-06-01 11:11:11 Fred2021-06-02 02:22:22 Wilma2021-06-03 03:33:33 Betty2021-06-03 03:33:33 Barney
We’ll notice from the sorted dataset that entries for the duplicate time of 2021-06-01 11:11:11
appear in the order they were originally entered. Thus, we can say that this result represents a stable sort.
In an ideal world, the same principle should also apply to a sort that retains the key/value association. One ...