0

我有一个文件夹,其中包含 1-25 个 php 文件,每个文件的标题1.php 2.php等。我想使用 php 按降序在页面上的数组中回显每个文件的内容。

我遇到的问题是它当前以相反的顺序输出,当它达到 10 时,它会将 11 放在 1 旁边。这不是人类如何解释的逻辑系统。

我一直在看这个: http: //php.net/manual/en/array.sorting.php 并且我已经尝试过arsort,并且在逻辑krsort上以从最高数字开始的降序排列十个之后的数组几乎没有成功. 完整代码如下:natcasesortrsort

$articles = glob("$_SERVER[DOCUMENT_ROOT]/assets/news/overview/*.php");

if(count($articles)) {
  rsort($articles);

foreach($articles as $article) {
    $article = basename($article);


include("$_SERVER[DOCUMENT_ROOT]/assets/news/overview/$article");

      }

    }

else {

echo "Sorry, no articles.";

}

谁能帮我完成这个 php 脚本?谢谢!

4

2 回答 2

1

我会使用这样的东西:

if(count($articles)) {
  natsort($articles);
  $articles = array_reverse($articles);
}

例子:

$a = array(
    "1.php",
    "12.php",
    "10.php",
    "3.php",
    "4.php",
    "5.php",
    "11.php",
    "2.php",
    "21.php",
    "13.php",                                       
    "22.php"); 
natsort($a);           
$a = array_reverse($a);

print_r($a);

结果:

Array (                                      
  [0] => 22.php
  [1] => 21.php
  [2] => 13.php
  [3] => 12.php     
  [4] => 11.php       
  [5] => 10.php 
  [6] => 5.php    
  [7] => 4.php 
  [8] => 3.php 
  [9] => 2.php
  [10] => 1.php
)
于 2013-09-01T12:05:17.480 回答
0

它按文件名对元素进行排序,文件名是字符串,而不是数字。您应该将不带扩展名的文件名转换为整数并将它们添加到新数组中。然后按索引对数组进行反向排序。

$sortedArticles = array();
foreach($articles as $article) {
    $sortedArticles[(int)basename($article)] = $article;
}

uksort($sortedArticles, function($a, $b) {
    return $b - $a
});

for($i = 1; $i <= count($articles); $i++) {
    include("$_SERVER[DOCUMENT_ROOT]/assets/news/overview/$sortedArticles[$i]");
}
于 2013-09-01T12:06:02.177 回答