每个列表项的顺序相反


Reverse order of foreach list items

我想颠倒此代码列表项的顺序。基本上,这是从最古老到最近的一组年份,我正试图扭转这种输出。

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