i have written this code
<?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
}?>
i want to output the last 3 memes(images) but this for loop doesn't work. So i found something that is called array_slice and i wanted to use it but everyone was using print_r but in this case i don't need it. So any suggestions?
Store those 3 elements of array $a
in a new array $b
by using 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
}
?>
It is as easy as this :
$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>';
}
Also see this snippet here in action.
Explanations : You use array_slice with first param being your array.
The second if the offset, i.e. the starting key of your array.
FWIW I have provided another alternative:
<?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 } ?>
It is slightly faster than the accepted solution.
Something else to note is that if the array is not a multiple of 3 then the corrected solution will throw an error since the splice will not return an array with the length of 3. Naturally, if $toShow
is greater than or equal to the count($a)
this will also throw an error.