在php中面对有线类型的输出数组排序

时间:2014-11-24 06:54:14

标签: php arrays sorting

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

我正在使用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

我真的很感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

您应该将sort($files)替换为实现自然排序的natsort($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值。