J'essaie de construire un petit site en utilisant XML au lieu d'une base de données.
J'aimerais créer un bouton next et prev qui fonctionnera par rapport au contenu que j'ai affiché.
J'ai trouvé la fonction php next () et prev () ainsi que current () mais je ne sais pas comment définir le pointeur sur une position spécifique pour pouvoir naviguer par rapport à la page en cours.
$list=array('page1','page2','page3')
par exemple, si je suis en train d'afficher le contenu de la page2, comment pourrais-je dire à php que je suis à $ list [1], de sorte que next ($ list) affiche page3?
Merci d'avance
Si votre tableau est toujours indexé de manière cohérente (par exemple, 'page1' est toujours à l'index '0'), c'est assez simple:
$List = array('page1', 'page2', 'page3', 'page4', 'page5');
$CurrentPage = 3; // 'page4'
while (key($List) !== $CurrentPage) next($List); // Advance until there's a match
Personnellement, je ne me fie pas à l'indexation automatique, car il est toujours possible que l'index automatique change. Vous devriez envisager de définir explicitement les clés:
$List = array(
'1' => 'page1',
'2' => 'page2',
'3' => 'page3',
);
EDIT: Si vous voulez tester les valeurs du tableau (au lieu des clés), utilisez current()
:
while (current($List) !== $CurrentPage) next($List);
En utilisant les fonctions ci-dessous, vous pouvez obtenir le suivant et précédent valeurs du tableau ..__ si courant valeur n'est pas valide ou c'est le dernier (premier - pour prev) valeur dans le tableau, alors:
Les fonctions sont cycliques.
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;
}
Le pointeur de tableau interne est principalement utilisé pour boucler un tableau dans un script PHP. Je ne recommanderais pas de l'utiliser pour passer d'une page à l'autre.
Pour cela, il suffit de garder trace du numéro de page et de la taille de la page (nombre d’éléments par page). Ensuite, lorsque vous chargez une autre page, vous pouvez les utiliser pour choisir les éléments du tableau à afficher. Par exemple:
$pageNum = $_GET["pageNum"];
$pageSize = 10;
$startIndex = ($pageNum - 1) * $pageSize;
$endIndex = ($startIndex + $pageSize) - 1;
(ou quelque chose de similaire)
une autre approche sans boucles ni recherche.
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);
}
En utilisant les fonctions ci-dessous, vous pouvez obtenir le suivant et précédent Clés du tableau ..__ si courant clé n'est pas valide ou c'est le dernier (premier - pour prev) clé dans le tableau, alors:
Les fonctions sont cycliques.
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;
}
J'utilise ce code pour définir le pointeur interne avec la clé du tableau.
reset($List);
while (key($List) !== $id && key($List) !== null) next($List);
if(key($List) === null) end($List);
Après cela, vous pouvez utiliser prev () ou next ().
Suivre la notification de @VaclavSir
Essaye ça
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);
}
}
}
pour tableau comme ceci:
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 =>