Current Location: Home> Latest Articles> How to use strnatcasecmp and array_filter functions for natural sorting filtering?

How to use strnatcasecmp and array_filter functions for natural sorting filtering?

gitbox 2025-05-20

In PHP, strnatcasecmp and array_filter functions are two very practical tools for natural sorting and array filtering, respectively. Combining these two functions, we can easily implement the natural sorting and filtering of arrays, especially when sorting and filtering arrays containing strings. Their combination can greatly improve the readability and efficiency of the code.

1. Introduction to strnatcasecmp function

The strnatcasecmp function is used to compare two strings and return their differences in the order of "natural sorting". The so-called "natural sorting" means sorting in the order of human habits. For example, the string "2" will be ahead of "10", which is different from the dictionary order. This function ignores case and is suitable for cases where it needs to be sorted in natural order.

grammar:

 strnatcasecmp(string $str1, string $str2): int
  • str1 : The first string.

  • str2 : The second string.

Return value: If $str1 is less than $str2 , return a negative number; if equal, return 0; if greater than $str2 , return a positive number.

2. Introduction to array_filter function

The array_filter function is used to filter elements in an array. It traverses the array according to the given callback function and returns elements that meet the criteria. This function is very suitable for filtering array elements that comply with certain rules.

grammar:

 array_filter(array $array, callable $callback, int $mode = 0): array
  • $array : The input array.

  • $callback : The callback function used for filtering. If the callback function is not provided, array_filter will remove all elements with a value of false .

  • $mode : Optional, specifying how to handle keys in an array. The default is 0, which means that the keys that retain the original array.

Return value: Filtered array.

3. Application examples of natural sorting and filtering

Suppose we have an array containing some file names that have both numbers and letters. We want these file names to be sorted naturally and filtered out files that contain specific keywords (such as "test".

Sample code:

 <?php

// Suppose we have an array of file names
$files = [
    "file10.txt",
    "file2.txt",
    "file1.txt",
    "testFile1.txt",
    "testFile2.txt",
    "file20.txt"
];

// usearray_filterFilter out the inclusion"test"Files
$filteredFiles = array_filter($files, function($file) {
    return stripos($file, 'test') !== false;
});

// usestrnatcasecmpDo natural sorting
usort($filteredFiles, 'strnatcasecmp');

// 输出筛选和排序后Files列表
echo "筛选和排序后Files列表:\n";
foreach ($filteredFiles as $file) {
    echo $file . "\n";
}

?>

Code parsing:

  1. Filter files : We use the array_filter function to filter the array and filter out the file name containing "test". The stripos function is used to ignore case checks whether the file name contains "test".

  2. Natural sort : Next, use the usort function to sort the filtered files naturally. usort accepts a comparison function as an argument, here we use strnatcasecmp for natural sorting.

  3. Output result : Finally, we output the filtered and sorted file name.

Running results:

 筛选和排序后Files列表:
testFile1.txt
testFile2.txt

4. Summary

By combining strnatcasecmp and array_filter functions, we can very conveniently sort and filter elements in an array naturally. strnatcasecmp provides us with the sorting method of human habits, while array_filter allows us to efficiently filter out elements that meet the criteria. The combination of the two can simplify our code and improve its readability, suitable for a variety of scenarios where sorting and filtering operations are required.