Я хотел бы изменить порядок элементов списка этого кода. В принципе, это набор лет от старого до недавнего времени, и я пытаюсь изменить этот результат.
<?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)
.
Вы можете использовать функцию usort для создания собственных правил сортировки
Предполагая, что вам просто нужно обратить вспять индексированный массив (не ассоциативный или многомерный), достаточно простого цикла :
$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
Я думаю, что это решение читается чище, чем возиться с индексом, и вы с меньшей вероятностью вводите ошибки обработки индексов, но проблема заключается в том, что ваш код, скорее всего, займет немного больше времени, если вам нужно сначала создать временную копию массива , Скопление с индексом, скорее всего, будет работать быстрее, и оно может также пригодиться, если вам действительно нужно ссылаться на индекс, как в:
$stack = array("orange", "banana", "apple", "raspberry"); $index = count($stack) - 1; while($index > -1){ echo $stack[$index] ." is in position ". $index . "\n<br>"; $index--; }
Но, как вы можете видеть, вы должны быть очень осторожны с индексом …
Если ваш массив заполняется SQL Query, рассмотрите возможность изменения результата в 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++; } ?>