Я хотел бы изменить порядок элементов списка этого кода. По сути, это набор лет, идущих от самых старых к недавним, и я пытаюсь изменить этот результат.
<?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++;
}
?>
Или вы можете использовать функцию array_reverse .
источник
array_reverse()
не изменяет исходный массив, а возвращает новый массив. (Смarray_reverse()
.) Итак, вам нужно либо сначала сохранить новый массив, либо просто использовать функцию в объявлении цикла for.<?php $input = array('a', 'b', 'c'); foreach (array_reverse($input) as $value) { echo $value."\n"; } ?>
Результат будет:
Итак, чтобы обратиться к 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>"; }
производит:
Я думаю, что это решение читается чище, чем возня с индексом, и у вас меньше шансов ввести ошибки обработки индекса, но проблема в том, что ваш код, вероятно, займет немного больше времени, если вам нужно сначала создать временную копию массива . Работа с индексом, вероятно, будет выполняться быстрее, и это также может пригодиться, если вам действительно нужно ссылаться на индекс, как в:
$stack = array("orange", "banana", "apple", "raspberry"); $index = count($stack) - 1; while($index > -1){ echo $stack[$index] ." is in position ". $index . "\n<br>"; $index--; }
Но, как видите, с индексом нужно быть очень осторожным ...
источник
array_pop
Подход в 3 раз медленнее , чемarray_reverse
подход: 3v4l.org/3jaTTПредполагая, что вам просто нужно перевернуть индексированный массив (не ассоциативный или многомерный), достаточно простого цикла for :
$fruits = ['bananas', 'apples', 'pears']; for($i = count($fruits)-1; $i >= 0; $i--) { echo $fruits[$i] . '<br>'; }
источник
Вы можете использовать функцию usort для создания собственных правил сортировки
источник
Если ваш массив заполняется с помощью SQL-запроса, подумайте об изменении результата в MySQL, то есть:
SELECT * FROM model_input order by creation_date desc
источник
<?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++; } ?>
источник