webentwicklung-frage-antwort-db.com.de

Wie setze ich einen internen Zeiger auf eine bestimmte Position? PHP/XML

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

35
chris

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);
34
matpie

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 vorwert im Array dann: 

  • die Funktion getNextVal (...) gibt den ersten zurück elementwert
  • die Funktion getPrevVal (...) gibt den letzten zurück elementwert

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;
}
6
Andrei

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)

2
JW.

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);
}
2
tjungcl

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 vorschlüssel im Array dann: 

  • die Funktion getNext (...) gibt 0 zurück (das erste Element schlüssel)
  • die Funktion getPrev (...) gibt das zurück schlüssel des letzten Arrayelements

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;
}
2
Andrei

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

1
EThaizone Jo

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 => 
0
Burhan Ibrahimi