Ich versuche, eine kleine Site mit XML anstelle einer Datenbank zu erstellen.
Ich möchte eine Next- und Prev-Schaltfläche erstellen, die relativ zu dem angezeigten Inhalt funktioniert.
Ich fand die php-Funktion next () und prev () sowie current (), aber ich weiß nicht, wie ich den Zeiger auf eine bestimmte Position setzen soll, um relativ zur aktuellen Seite navigieren zu können.
$list=array('page1','page2','page3')
wenn ich zum Beispiel Inhalte von Seite2 anzeige, wie könnte ich php sagen, dass ich in $ list [1] bin, so dass in next ($ list) page3 angezeigt wird?
Danke im Voraus
Wenn Ihr Array immer einheitlich indiziert ist (z. B. 'page1' ist immer auf Index '0'), ist es ziemlich einfach:
$List = array('page1', 'page2', 'page3', 'page4', 'page5');
$CurrentPage = 3; // 'page4'
while (key($List) !== $CurrentPage) next($List); // Advance until there's a match
Ich persönlich verlasse mich nicht auf die automatische Indexierung, da sich die automatische Indexierung jederzeit ändern kann. Sie sollten die Schlüssel explizit definieren:
$List = array(
'1' => 'page1',
'2' => 'page2',
'3' => 'page3',
);
EDIT: Wenn Sie die Werte des Arrays (anstelle der Schlüssel) testen möchten, verwenden Sie current()
:
while (current($List) !== $CurrentPage) next($List);
Mit den folgenden Funktionen können Sie die next und previous werte des Arrays . Wenn aktuell wert ist nicht gültig oder es ist das zuletzt (zuerst - für vor) wert im Array dann:
Die Funktionen sind zyklisch.
function getNextVal(&$array, $curr_val)
{
$next = 0;
reset($array);
do
{
$tmp_val = current($array);
$res = next($array);
} while ( ($tmp_val != $curr_val) && $res );
if( $res )
{
$next = current($array);
}
return $next;
}
function getPrevVal(&$array, $curr_val)
{
end($array);
$prev = current($array);
do
{
$tmp_val = current($array);
$res = prev($array);
} while ( ($tmp_val != $curr_val) && $res );
if( $res )
{
$prev = current($array);
}
return $prev;
}
Der interne Array-Zeiger wird hauptsächlich verwendet, um ein Array innerhalb eines PHP -Skripts zu durchlaufen. Ich würde es nicht empfehlen, von Seite zu Seite zu wechseln.
Behalten Sie dazu einfach die Seitennummer und die Seitengröße (Anzahl der Elemente pro Seite) im Auge. Wenn Sie dann eine andere Seite laden, können Sie damit entscheiden, welche Array-Elemente angezeigt werden sollen. Zum Beispiel:
$pageNum = $_GET["pageNum"];
$pageSize = 10;
$startIndex = ($pageNum - 1) * $pageSize;
$endIndex = ($startIndex + $pageSize) - 1;
(oder etwas ähnliches)
ein weiterer Ansatz ohne Schleifen oder Suche.
list($prev,$next) = getPrevNext($oObjects,$sCurrentKey);
function getPrevNext($aArray,$key){
$aKeys = array_keys($aArray); //every element of aKeys is obviously unique
$aIndices = array_flip($aKeys); //so array can be flipped without risk
$i = $aIndices[$key]; //index of key in aKeys
if ($i > 0) $prev = $aArray[$aKeys[$i-1]]; //use previous key in aArray
if ($i < count($aKeys)-1) $next = $aArray[$aKeys[$i+1]]; //use next key in aArray
return array($prev,$next);
}
Mit den folgenden Funktionen können Sie die next und previous Schlüssel des Arrays . Wenn aktuell schlüssel ist nicht gültig oder es ist das zuletzt (zuerst - für vor) schlüssel im Array dann:
Die Funktionen sind zyklisch.
function getNext(&$array, $curr_key)
{
$next = 0;
reset($array);
do
{
$tmp_key = key($array);
$res = next($array);
} while ( ($tmp_key != $curr_key) && $res );
if( $res )
{
$next = key($array);
}
return $next;
}
function getPrev(&$array, $curr_key)
{
end($array);
$prev = key($array);
do
{
$tmp_key = key($array);
$res = prev($array);
} while ( ($tmp_key != $curr_key) && $res );
if( $res )
{
$prev = key($array);
}
return $prev;
}
Ich verwende diesen Code zum Setzen eines internen Zeigers mit dem Schlüssel des Arrays.
reset($List);
while (key($List) !== $id && key($List) !== null) next($List);
if(key($List) === null) end($List);
Danach können Sie prev () oder next () verwenden.
Update Folgen Sie der Benachrichtigung von @VaclavSir
Versuche dies
public function getNextVal(&$array, $curr_val){
foreach($array as $k=>$v){
if($v['your_key'] == $curr_val){
if(isset($array[$k+1]))
return $array[$k+1];
else
return $array[0];
}
}
}
public function getPrevVal(&$array, $curr_val){
foreach($array as $k=>$v){
if($v['your_key'] == $curr_val){
if(isset($array[$k-1]))
return $array[$k-1];
else
return end($array);
}
}
}
für Array wie folgt:
array (size=3)
0 =>
array (size=11)
'id' => string '21' (length=2)
'cat' => string '1' (length=1)
'gal' => string '1' (length=1)
'type' => string 'image' (length=5)
'name' => string 'chalk_art_dies-irea_2nd_pic' (length=27)
'permalink' => string 'chalk-art-dies-irea-2nd-pic' (length=27)
'url' => string 'rxNsPoEiJboJQ32.jpg' (length=19)
'content' => string '' (length=0)
'date' => string '1432076359' (length=10)
'order' => string '20' (length=2)
'views' => string '0' (length=1)
1 =>
array (size=11)
'id' => string '10' (length=2)
'cat' => string '1' (length=1)
'gal' => string '1' (length=1)
'type' => string 'image' (length=5)
'name' => string '3dchalkart' (length=10)
'permalink' => string '3dchalkart' (length=10)
'url' => string 's57i5DKueUEI4lu.jpg' (length=19)
'content' => string '' (length=0)
'date' => string '1432076358' (length=10)
'order' => string '9' (length=1)
'views' => string '0' (length=1)
2 =>