我想颠倒此代码列表项的顺序。基本上,这是从最古老到最近的一组年份,我正试图扭转这种输出。
<?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解决方案,你也可以简单地倒数列表,从前到后访问它:
$accounts = Array(
'@jonathansampson',
'@f12devtools',
'@ieanswers'
);
$index = count($accounts);
while($index) {
echo sprintf("<li>%s</li>", $accounts[--$index]);
}
上面的设置$index
元素的总数,然后开始从后到前访问它们,从而减少下一次迭代的索引值。
反转数组
您还可以利用 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
数组的方法。 如果是前者,现在您应该删除它,因为您有正确的解决方案。如果是后者,则可以在循环外用$j = count($skills_nav)
替换它。
如果您不介意销毁数组(或其临时副本),您可以执行以下操作:
$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--;
}
但如您所见,您必须非常小心索引...
您可以使用 usort 函数创建自己的排序规则
假设您只需要反转索引数组(非关联或多维),一个简单的 for 循环就足够了:
$fruits = ['bananas', 'apples', 'pears'];
for($i = count($fruits)-1; $i >= 0; $i--) {
echo $fruits[$i] . '<br>';
}
如果您的数组是通过 SQL 查询填充的,请考虑在 MySQL 中反转结果,即:
SELECT * FROM model_input order by creation_date desc
如果数组中没有布尔值 false,则可以使用基于内部指针函数的下一个代码:
$array = ['banana', 'apple', 'pineapple', 'lemon'];
$value = end($array);
while ($value !== false) {
// In case you need a key
$key = key($array);
// Do something you need to
echo $key . ' => ' . $value . "'n";
// Move pointer
$value = prev($array);
}
此解决方案适用于具有任意键的关联数组,不需要更改现有数组或创建新数组。
<?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++;
}
?>