php - 逻辑排序数组的顺序相反

时间:2013-09-01 11:57:43

标签: php arrays sorting

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

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

我一直在看这个:http://php.net/manual/en/array.sorting.php 并且我尝试arsortkrsortnatcasesortrsort几乎没有成功地按照从最高编号开始的降序排列十次后对数组进行逻辑排序。 完整代码如下:

$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脚本吗?谢谢!

2 个答案:

答案 0 :(得分: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
)

答案 1 :(得分: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]");
}