Chciałbym odwrócić kolejność elementów listy w tym kodzie. Zasadniczo jest to zbiór lat od najstarszych do najnowszych i próbuję odwrócić ten wynik.
<?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++;
}
?>
Lub możesz użyć funkcji array_reverse .
źródło
array_reverse()
nie zmienia tablicy źródłowej, ale zwraca nową tablicę. (Zobaczarray_reverse()
.) Więc albo musisz najpierw zapisać nową tablicę albo po prostu użyć funkcji w deklaracji twojej pętli for.<?php $input = array('a', 'b', 'c'); foreach (array_reverse($input) as $value) { echo $value."\n"; } ?>
Wynik będzie:
Tak więc, aby zaadresować do OP, kod wygląda następująco:
<?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++; }
Na koniec zgadnę, że
$j
był to albo licznik użyty w początkowej próbie uzyskania odwrotnego spaceru$skills_nav
, albo sposób na policzenie$skills_nav
tablicy. Jeśli to pierwsze, należy je usunąć teraz, gdy masz prawidłowe rozwiązanie. Jeśli to drugie, można je zastąpić poza pętlą rozszerzeniem$j = count($skills_nav)
.źródło
Jeśli nie masz nic przeciwko zniszczeniu tablicy (lub jej tymczasowej kopii), możesz zrobić:
$stack = array("orange", "banana", "apple", "raspberry"); while ($fruit = array_pop($stack)){ echo $fruit . "\n<br>"; }
produkuje:
Myślę, że to rozwiązanie czyta czystsze niż majstrowanie przy indeksie i jest mniej prawdopodobne, że wprowadzisz błędy obsługi indeksów, ale problem z nim polega na tym, że twój kod prawdopodobnie potrwa nieco dłużej, jeśli będziesz musiał najpierw utworzyć tymczasową kopię tablicy . Majstrowanie przy indeksie prawdopodobnie będzie działać szybciej, ale może się również przydać, jeśli rzeczywiście potrzebujesz odwołać się do indeksu, na przykład:
$stack = array("orange", "banana", "apple", "raspberry"); $index = count($stack) - 1; while($index > -1){ echo $stack[$index] ." is in position ". $index . "\n<br>"; $index--; }
Ale jak widać, z indeksem trzeba bardzo uważać ...
źródło
array_pop
Podejście jest 3 razy wolniej niżarray_reverse
podejścia: 3v4l.org/3jaTTZakładając, że wystarczy odwrócić tablicę indeksowaną (nie asocjacyjną ani wielowymiarową), wystarczyłaby prosta pętla for :
$fruits = ['bananas', 'apples', 'pears']; for($i = count($fruits)-1; $i >= 0; $i--) { echo $fruits[$i] . '<br>'; }
źródło
Możesz użyć funkcji usort, aby stworzyć własne reguły sortowania
źródło
Jeśli tablica jest wypełniana przez zapytanie SQL, rozważ odwrócenie wyniku w MySQL, tj .:
SELECT * FROM model_input order by creation_date desc
źródło
<?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++; } ?>
źródło