array_slice но для изображений php

Я написал этот код

  <?php
        $a = Meme::all();
        $b = count($a);
        for($i=$b;$i<$b-3;$i--)  {
    ?>      <div class="col-sm-6"><img class="lazy" data-src="<?php echo $a[$i]->path; ?>" /> </div>
    <?php
    }?> 

Я хочу вывести последние 3 мема (изображения), но это для цикла не работает. Итак, я нашел что-то, что называется array_slice, и я хотел использовать это, но все использовали print_r, но в этом случае мне это не нужно. Так какие-нибудь предложения?

3 ответа

Решение

Сохраните эти 3 элемента массива $a в новом массиве $b используя array_slice:

<?php    
    $a = Meme::all();
    $b = array_slice($a, 3);

    for ($i = 0; $i < 3; $i++){
?>
    <div class="col-sm-6"><img class="lazy" data-src="<?php echo $b[$i]->path; ?>" /> </div>
<?php
    }
?>

Я предоставил другую альтернативу:

<?php
$a = Meme::all();
$b = count($a);
$toShow = 3; // how many elements to display

for ($i = $b - $toShow; $i < $b; $i++) { ?>
    <div class="col-sm-6"><img class="lazy" data-src="<?php echo $a[$i]->path; ?>" /></div>
<?php } ?>

Это немного быстрее, чем принятое решение.
Следует также отметить, что если массив не кратен 3, то исправленное решение выдаст ошибку, так как соединение не вернет массив длиной 3. Естественно, если $toShow больше или равно count($a) это также выдаст ошибку.

Это так просто, как это:

$nb = 3;

$a = [1 => 'foo', 2 => 'bar', 3 => 'john', 4 => 'doe', 5 => 'test'];
$b = count($a);
$results = array_slice($a, $b-$nb, $nb);

foreach($result AS $k => $result) {
    echo '<p>'.$result.'</p>';
}

Также посмотрите этот фрагмент здесь в действии.

Пояснения: Вы используете array_slice с первым параметром, являющимся вашим массивом. Второе, если смещение, т.е. начальный ключ вашего массива.

Другие вопросы по тегам