面对 PHP 中的有线输出数组排序


facing wired kind of output array sort in php

我知道这是一个简单的问题,但我面临着有线问题。

我正在使用 scandir() 扫描一些 PDF。 这是我使用的以下代码

<?php
$dir    = 'download/';
$files = scandir($dir);
sort($files);
        for ($i=2; $i <count($files); $i++) { 
            echo "<a href=download/$files[$i]>$files[$i]</a> ";
            echo "<br>";
        }
print_r($files);
?>  

根据我的 exp,它应该给我输出 oder

1.pdf
2.pdf
.
.
.
.
.
.
.
10.pdf
11.pdf

这样,但我在输出中得到的是以下内容

1.pdf
10.pdf
11.pdf
2.pdf
.
.
.
.
.
.
11.pdf

另外,如果我print_r()检查数组,它显示以下内容

 Array ( [0] => . [1] => .. [2] => 1.pdf [3] => 10.pdf [4] => 2.pdf [5] => principal 10.pdf [6] => principal11.pdf [7] => principal12.pdf [8] => principal13.pdf [9] => principal14.pdf [10] => principal15.pdf [11] => principal16.pdf [12] => principal4.pdf [13] => principal5.pdf [14] => principal6.pdf [15] => principal7.pdf [16] => principal8.pdf [17] => principal9.pdf ) 1

我真的很感激你的帮助。

你应该用 natsort($files) 替换sort($files),这实现了自然排序。

测试代码:

$array = array('1.pdf', '10.pdf', '2.pdf', '3.pdf', '6.pdf', '11.pdf');
natsort($array);
print_r($array);

其中输出:

Array
(
    [0] => 1.pdf
    [2] => 2.pdf
    [3] => 3.pdf
    [4] => 6.pdf
    [1] => 10.pdf
    [5] => 11.pdf
)

要遍历$array,请使用foreach而不是依赖于数组键for循环。例如:

foreach($array as $file) {
  if($file == '.' || $file == '..') {
    continue;
  }
  echo $file . '<br />';
}

参考: natsort()

旁注:您的 HTML 代码无效。您应该用引号将href值括起来。