每个列表项目的反向顺序
我想颠倒这个代码的列表项的顺序。 基本上这是从最古老到最近的一整套年,我正试图扭转这个结果。
<?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++; } ?>