每个列表项目的反向顺序

我想颠倒这个代码的列表项的顺序。 基本上这是从最古老到最近的一整套年,我正试图扭转这个结果。

<?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++; } ?> 

向后走

如果您正在寻找一个纯粹的PHP解决scheme,您也可以简单地倒数列表中,前后访问:

 $accounts = Array( '@jonathansampson', '@f12devtools', '@ieanswers' ); $index = count($accounts); while($index) { echo sprintf("<li>%s</li>", $accounts[--$index]); } 

上面设置$index为元素的总数,然后开始对它们进行back-to-front访问,减less下一次迭代的索引值。

反转arrays

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

 $accounts = Array( '@jonathansampson', '@f12devtools', '@ieanswers' ); foreach ( array_reverse($accounts) as $account ) { echo sprintf("<li>%s</li>", $account); } 

或者你可以使用array_reverse函数。

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的逆向行走的$skills_nav ,或者是计算$skills_nav数组的方法。 如果是前者,现在应该被删除,你有正确的解决scheme。 如果是后者,则可以在$j = count($skills_nav)之外的循环之外进行replace。

你可以使用usort函数来创build自己的sorting规则

如果您的数组通过SQL查询填充,请考虑颠倒MySQL中的结果,即:

 SELECT * FROM model_input order by creation_date desc 

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

 $fruits = ['bananas', 'apples', 'pears']; for($i = count($fruits)-1; $i >= 0; $i--) { echo $fruits[$i] . '<br>'; } 

如果你不介意销毁数组(或它的临时副本),你可以这样做:

 $stack = array("orange", "banana", "apple", "raspberry"); while ($fruit = array_pop($stack)){ echo $fruit . "\n<br>"; } 

生产:

 raspberry apple banana orange 

我认为这个解决scheme比清理索引更干净,而且你不太可能引入索引处理错误,但是如果你必须先创build一个数组的临时副本,那么你的代码可能会稍微运行一段时间才能运行。 摆弄索引可能会跑得更快,而且如果你真的需要引用索引,它也可能派上用场,如下:

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

但正如你所看到的,你必须非常小心指数…

 <?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++; } ?>