Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Element suivant et precedent dans un tableau

3 réponses
Avatar
Bertrand Mollinier Toublet
Salut,

j'ai une question qui me parait assez simple, et que je m'etonne de ne
pas avoir trouve dans la FAQ >:-)

Etant donne un tableau $pics, indexe par des chaines de caractere
arbitraires, et etant donne un index $pid, je cherche un moyen d'obtenir
l'element suivant et l'element precedent du tableau.

Le manuel indique bien entendu les fonctions next() et prev(), mais ces
fonctions comptent sur le fait que le pointeur courant du tableau est
positionne correctement, ce qui n'est pas le cas.

Y'a-t-il un autre moyen de positionner ce pointeur que de passer
sequentiellement tous les elements du tableau avec each() jusqu'a
retrouver mon index ($pid) ?

Y'a-t-il un autre moyen d'obtenir les elements voulus sans utiliser
next() et prev() ?

Noter que pour le moment, j'ai ce code, qui ne me plait pas:
function get_next_pic($pics, $pid)
{
while(list($tmp_pid, $tmp_pic) = each($pics)
{
if ($tmp_pid == $pid)
{
$pic = current($pics);
reset($pics);
return $pic;
}
}
return -1;
}

et get_prev_pic() est encore plus moche ;-)
--
Bertrand Mollinier Toublet
"Reality exists" - Richard Heathfield, 1 July 2003

3 réponses

Avatar
Olivier Miakinen
Salut,

j'ai une question qui me parait assez simple, et que je m'etonne de ne
pas avoir trouve dans la FAQ >:-)

Etant donne un tableau $pics, indexe par des chaines de caractere
arbitraires, et etant donne un index $pid, je cherche un moyen d'obtenir
l'element suivant et l'element precedent du tableau.


Voici une idée (non testé) :

$all_pids = array_keys($pics);
/* peut être fait une fois pour toute, tant que tu n'ajoutes ni ne
retires aucune clé */

$pid_key = array_search($all_pids, $pid);

/* if $pid_key est un nombre > 0 */
$prev_pid = $all_pids[$pid_key - 1];
/* idem pour $next_pid */

$prev_pic = $pics[$prev_pid];
/* idem pour $next_pic */

Avatar
P'tit Marcel
Bertrand Mollinier Toublet écrivit:

j'ai une question qui me parait assez simple, et que je m'etonne de ne
pas avoir trouve dans la FAQ >:-)


tout simplement parce que ce n'est pas une 'question fréquemment posée'


Etant donne un tableau $pics, indexe par des chaines de caractere
arbitraires, et etant donne un index $pid, je cherche un moyen d'obtenir
l'element suivant et l'element precedent du tableau.


Faut savoir, soit le tableau a des clés ayant un sens (et dans ce cas là on
extrait la valeur d'une clé donnée ou on trie le tableau selon les clés),
soit c'est l'ordre de rangement qui importe (le tableau représente une pile
ou une file). Je ne vois pas trop dasn quel cas on aurait besoin des deux
aspects : un tableau associatif *mais* considéré comme une pile ou une
file.



--
P'tit Marcel
statistiques sur les forums modérés : http://www.centrale-lyon.org/ng/

Avatar
Bertrand Mollinier Toublet
P'tit Marcel wrote:
Bertrand Mollinier Toublet écrivit:

j'ai une question qui me parait assez simple, et que je m'etonne de ne
pas avoir trouve dans la FAQ >:-)


tout simplement parce que ce n'est pas une 'question fréquemment posée'


Apparement, oui :-)

Etant donne un tableau $pics, indexe par des chaines de caractere
arbitraires, et etant donne un index $pid, je cherche un moyen d'obtenir
l'element suivant et l'element precedent du tableau.



Faut savoir, soit le tableau a des clés ayant un sens (et dans ce cas là on
extrait la valeur d'une clé donnée ou on trie le tableau selon les clés),
soit c'est l'ordre de rangement qui importe (le tableau représente une pile
ou une file). Je ne vois pas trop dasn quel cas on aurait besoin des deux
aspects : un tableau associatif *mais* considéré comme une pile ou une
file.

Ok, mais plus concretement ? J'ai mon tableau, associatif. Je le trie

par ordre croissant des clefs avec ksort; ce sont des chaines de
caracteres. Maintenant, etant donne une clef $pid, et mon tableau $pics
comment je trouve la clef precedente et la clef suivante ?

Dans mon cas, le tableau represente un ensemble de photos. Sur une page,
je veux afficher la photo courante (identifiee par $pid, que j'obtiens
via une requete GET), la photo precedente et la photo suivante.
--
Bertrand Mollinier Toublet
"Reality exists" - Richard Heathfield, 1 July 2003