foreach列表项的反向顺序

时间:2012-05-27 22:01:01

标签: php

我想颠倒此代码列表项的顺序。基本上它是从最旧到最近的一组年,我试图扭转那个输出。

<?php
    $j=1;     
    foreach ( $skills_nav as $skill ) {
        $a = '<li><a href="#" data-filter=".'.$skill->slug.'">';
        $a .= $skill->name;                 
        $a .= '</a></li>';
        echo $a;
        echo "\n";
        $j++;
    }
?>  

8 个答案:

答案 0 :(得分:141)

向后走

如果您正在寻找纯粹的PHP解决方案,您还可以简单地在列表中向后计数,从前到后访问它:

$accounts = Array(
  '@jonathansampson',
  '@f12devtools',
  '@ieanswers'
);

$index = count($accounts);

while($index) {
  echo sprintf("<li>%s</li>", $accounts[--$index]);
}

上面将$index设置为元素总数,然后开始从前到后访问它们,减少下一次迭代的索引值。

反转数组

您还可以利用array_reverse function反转数组的值,允许您以相反的顺序访问它们:

$accounts = Array(
  '@jonathansampson',
  '@f12devtools',
  '@ieanswers'
);

foreach ( array_reverse($accounts) as $account ) {
  echo sprintf("<li>%s</li>", $account);
}

答案 1 :(得分:27)

或者您可以使用array_reverse功能。

答案 2 :(得分:12)

array_reverse()不会更改源数组,但会返回一个新数组。 (参见array_reverse()。)因此,您需要先存储新数组,或者只在for循环声明中使用函数。

<?php 
    $input = array('a', 'b', 'c');
    foreach (array_reverse($input) as $value) {
        echo $value."\n";
    }
?>

输出将是:

c
b
a

因此,为了解决OP,代码变为:

<?php
    $j=1;     
    foreach ( array_reverse($skills_nav) as $skill ) {
        $a = '<li><a href="#" data-filter=".'.$skill->slug.'">';
        $a .= $skill->name;                 
        $a .= '</a></li>';
        echo $a;
        echo "\n";
        $j++;
}

最后,我要猜测$j是用于初步尝试获取$skills_nav反向行走的计数器,还是计算{{1}的方法数组。如果是前者,那么现在应该删除它,因为你有正确的解决方案。如果是后者,可以在循环外部用$skills_nav替换它。

答案 3 :(得分:4)

如果您不介意销毁阵列(或其临时副本),您可以这样做:

$stack = array("orange", "banana", "apple", "raspberry");

while ($fruit = array_pop($stack)){
    echo $fruit . "\n<br>"; 
}

产生

raspberry 
apple 
banana 
orange 

我认为这个解决方案比阅读索引更简洁,你不太可能引入索引处理错误,但问题是如果你必须创建一个临时副本,你的代码可能需要稍长的时间来运行数组首先。 摆弄索引可能会运行得更快,如果您确实需要引用索引,它也可以派上用场,如:

$stack = array("orange", "banana", "apple", "raspberry");
$index = count($stack) - 1;
while($index > -1){
    echo $stack[$index] ." is in position ". $index . "\n<br>";
    $index--;
} 

但正如你所看到的,你必须非常小心索引......

答案 4 :(得分:3)

您可以使用usort功能创建自己的排序规则

答案 5 :(得分:3)

假设你只需要反转一个索引数组(不是关联数组或多维数组),一个简单的for loop就足够了:

readdir

答案 6 :(得分:1)

如果您的数组是通过SQL查询填充的,请考虑在MySQL中反转结果,即:

SELECT * FROM model_input order by creation_date desc

答案 7 :(得分:-1)

<?php
    $j=1; 


      array_reverse($skills_nav);   


    foreach ( $skills_nav as $skill ) {
        $a = '<li><a href="#" data-filter=".'.$skill->slug.'">';
        $a .= $skill->name;                 
        $a .= '</a></li>';
        echo $a;
        echo "\n";
        $j++;
    }
?>