Nie kończący się wynik zapytania (prosty loop)

0

Witam
mam problem ktorego nie potrafie rozgryźć

troche teorii co che uzyskać

robie zapytanie do bazy danych ktora wypluwa mi nastepujace rekordy ( teoretycznie)

2 3 5 6 8 9 11 16 18

i chcialbym zrobi tak by na stronie pojawialo sie tylko 5 rekordów ale jak jak sie pojawi ostatni na prze ostatniej pozycji to zeby po nim byl pierwszy i tak w kólko ponizej przykład

takie cosik

<< 8 9 11 16 18 >>

<< 9 11 16 18 2>>

<< 11 16 18 2 3>>

<< 16 18 2 3 5 >>

i tak w kolko

ma ktos jakis pomysl jak to zapetlić

z góry dzięki za pomoc!!

0

Jesli np $tablica zawiera wlementy ktore zwrocilo Ci zapytanie, daj
$tablica = array_merge($tablica, $tablica, $tablica);

Jesli ma ona duzo elementow, mozesz dac
$tablica = array_merge(array_slice($tablica, -3, 3), $tablica, array_slice ($tablica, 0, 3));

//najprostszy i naszybszy sposob ;)

Jesli bardzo chcesz to zrobic w zapytaniu uzyj UNION
Ale to oczywiscie przy zlozonym zapytaniu bedzie dluzej trwalo...

0

a tak sobie z nudów zrobiłem to co chciałes. możesz wpisac kierunek prawo lub lewo.. ;)

<?
$liczby = array(2,3,5,6,8,9,11,16,18);
$ile = 5;
$kierunek = 'lewo'; // prawo albo lewo ;)

echo implode(",", $liczby).'<br>';

for ($a=0 ; $a<$ile ; $a++)
{

if ($kierunek == 'lewo')
{
	$first = $liczby[0]; // pobiera pierwszy element tablicy
	array_push($liczby,$first); // wstawia pierwszy element tablicy na koniec
		array_shift($liczby); // usuwa pierwszy element tablicy
}
else if ($kierunek == 'prawo')
{
        $last=$liczby[count($liczby)-1]; // pobiera ostatni element tablicy
        array_unshift($liczby,$last); // wstawia ostatni element tablicy na poczatek
        array_pop($liczby); // usuwa ostatni element tablicy
}
echo implode(",", $liczby).'<br>';
}
?>
0

no fajnie , szkoda ze nie zapętla przy pierwszycy i ostatnich liczbach

0

mało optymalne, ale najłatwiej na to wpaść i najłatwiej zrozumieć działanie:

<?php

$liczby = array(2,3,5,6,8,9,11,16,18);

$ile = 5;
$start = empty($_GET['start']) ? 0 : (int)$_GET['start'];

function xslice($arr, $start, $end){
  $wyn = Array();
  $c = count($arr);
  for($i = $start; $i < $end; $i++)
    $wyn[] = $arr[($i % $c + $c) % $c];
  return $wyn;
}

$liczby = xslice($liczby, $start, $start + $ile);

?>
<a href="?start=<?= $start-1 ?>">&lt;&lt;</a>
<?= implode(' ', $liczby) ?>
<a href="?start=<?= $start+1 ?>">&gt;&gt;</a>

bo trudno jednak z tym slice wymyślić rozwiązanie które się wielokrotnie zapętla (gdy np ile przekracza 3x długość tablicy)

// coś mam dzikie wrażenie że tego typu funkcja jest normalnie w php ...

// kod po rozmowie na gg:

<?php

$liczby = array(2,3,5,6,8,9,11,16,18);

$ile = 5;
$start = empty($_GET['start']) ? 0 : (int)$_GET['start'];

function absEx($n, $c){
  return ($n % $c + $c) % $c;
}

function xslice($arr, $start, $end){
  $wyn = Array();
  $c = count($arr);
  for($i = $start; $i <= $end; $i++)
    $wyn[] = $arr[absEx($i, $c)];
  return $wyn;
}

$prev = absEx($start - 1, $c = count($liczby));
$next = absEx($start + 1, $c);

$start -= floor($ile / 2);
$liczby = xslice($liczby, $start, $start + $ile - 1);

?>
<a href="?start=<?= $prev ?>">&lt;&lt;</a>
<?= implode(' ', $liczby) ?>
<a href="?start=<?= $next ?>">&gt;&gt;</a>

1 użytkowników online, w tym zalogowanych: 0, gości: 1