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 с первым параметром, являющимся вашим массивом. Второе, если смещение, т.е. начальный ключ вашего массива.