Current Location: Home> Latest Articles> How to Achieve Natural Sorting of File Names Using natsort: A Step-by-Step Guide

How to Achieve Natural Sorting of File Names Using natsort: A Step-by-Step Guide

gitbox 2025-06-09

What is Natural Sorting?

Natural sorting is a method of sorting based on the literal order of strings. Unlike traditional alphabetical sorting, natsort() takes into account the numerical relationships between numbers. For example:

  • file1.txt comes before file2.txt

  • file10.txt comes after file2.txt

This sorting method is more aligned with how we typically think when sorting items in daily life.


Using natsort to Naturally Sort File Names

Step 1: Retrieve an Array of File Names

First, we need an array that contains the file names. Typically, we can use the scandir() function to get all the file names in a directory.

$files = scandir('path/to/your/directory');

This code will return an array that includes all file and subdirectory names in the directory. Note that scandir() will by default return the special directories . and .., so we may need to filter them out.

Step 2: Sort the File Names Using natsort

Once we have the array of file names, we can call the natsort() function to sort the array.

natsort($files);

natsort() will naturally sort the file names, ensuring that "file1.txt" comes before "file10.txt".

Step 3: Display the Sorted File Names

After sorting, we can use a foreach loop to output the sorted file names.

foreach ($files as $file) {
    echo $file . "\n";
}

This will display the list of file names sorted in natural order.


Example Code

Combining the steps above, the final code is as follows:

<?php
<p>// Retrieve all files in the directory<br>
$files = scandir('path/to/your/directory');</p>
<p>// Remove the . and .. directories<br>
$files = array_diff($files, array('.', '..'));</p>
<p>// Sort the file names using natsort<br>
natsort($files);</p>
<p>// Output the sorted file names<br>
foreach ($files as $file) {<br>
echo $file . "\n";<br>
}</p>
<p>?><br>

Example Output

Assume the directory contains the following files:

file1.txt
file10.txt
file2.txt
file20.txt

After sorting with natsort(), the output will be:

file1.txt
file2.txt
file10.txt
file20.txt

Important Considerations for natsort and natsort()

  • The natsort() function directly modifies the original array, so there is no need to assign the result to a new array before calling it.

  • If you need to sort in reverse order, you can first call natsort() and then use the array_reverse() function.

  • natsort() is case-sensitive, which can affect the sorting result if the file names contain uppercase letters. If you need to perform a case-insensitive sort, you can convert the file names to either lowercase or uppercase before calling natsort().

For example:

// Convert the file names to lowercase
$files = array_map('strtolower', $files);
natsort($files);