2013-09-01 171 views
0

我有一个包含php文件的文件夹,每个文件的标题为1.php2.php等 我想在页面中使用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脚本了吗?谢谢!

+0

感谢上帝对我们来说,计算机做他们计划要做的事情,而不仅仅是我们希望他们做的事......文章正在被排序为字符串,但你希望他们排序为整数......去很难。要么只提取文件名的数字部分,要么使用'01 .php','02 .php'作为文件名。 –

回答

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 
) 
+0

你是天赐之宝!工作完美..我明白你也做了什么!谢谢你今天教我新东西:) –

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]"); 
} 
相关问题