@zeni1agent

Как вывести массив foreach в обратном порядке?

У меня есть вот такой массив
$go = [test1,test2,test3]
И мне необходимо его вернуть в обратном порядке таким образом что бы
foreach($go as $key => $val){
echo $key;
echo $val;
}

Вернуло мне 3 test3, 2 test2, 1 test1
for не подойдет так как я не знаю заранее сколько будет элементов в массиве.
а array_reverse(); возвращает мне 1 test3, 2 test2, 3 test1
Как мне это сделать?
  • Вопрос задан
  • 803 просмотра
Решения вопроса 1
orlov0562
@orlov0562 Куратор тега PHP
I'm cool!
у array_reverse есть второй параметр отвечающий за сохранение порядка ключей
<?php
$go = ['test1','test2','test3'];
print_r(array_reverse($go, true));

выведет
Array ( [2] => test3 [1] => test2 [0] => test1 )

более правильное решение если массив именно такой как ты указал, т.е. не ассоциативный
<?php
$go = ['test1','test2','test3'];

for ($i=count($go)-1; $i>=0; $i--) {
     echo $i.' => '.$go[$i].'<br>';
}

выведет
2 => test3
1 => test2
0 => test1
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
bitniks
@bitniks
PHP/Go/Symfony developer
Еще один вариант реверсивного перебора. Будет работать также с ассоциативными массивами. Предварительный реверс массива не требуется, поэтому будет эффективнее
$array = ["zero", "one", "two", "three", "four"];

for (end($array); ($key = key($array)) !== null; prev($array) ) {
    print($key . " : " . current($array) . "\n");
}

sandbox.onlinephpfunctions.com/code/9f09320d307718...
Ответ написан
AleksandrB
@AleksandrB
Во-первых, for подойдет, для этого нужно проверять длину массива
for ($i=0;$i<count($arr); $i++) {
    // code
}
// в вашем случае
for ($i=count($arr)-1;$i>=0; $i--) {
    echo $arr[$i];
}

Во-вторых, foreach не перебирает элементы в обратном порядке
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы