Tableaux : changer la position du pointeur

Petit nouveau ! | 3 Messages

10 sept. 2008, 13:25

Bonjour à tous!

je cherche une fonction qui permette de se positionner dans un tableau à hauteur d'une clé connue.

Exemple :

Code : Tout sélectionner

$montTableau= array("test0","test1","test2","test3"); $curseur = poscurseur($montTableau, 1); // c'est cette fonction qui m'intéresserait ! elle positionnerai le curseur de monTableau sur la valeur "test1" (clé = 1) //Ensuite je peux utiliser les fonctions next ou prev pour connaitre les éléments précédents et suivants ma clé $suivant = next($montTableau);
merci de votre aide!

Eléphant du PHP | 169 Messages

10 sept. 2008, 15:10

Tu as tout ce qu'il te faut avec les fonctions array de php :

current
next
prev


Voir même histoire d'optimiser ta fonction :

key
array_key_exists
in_array (si tu passes par une valeur)

Et n'oublie pas le terrible foreach pour parcourir ton tableau.

Bonne chance :wink:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

10 sept. 2008, 15:19

_activmik a raison, tu es en train de réinventer la roue et c'est un travail sup qui ne sert à rien exactement comme ta fonction :
$curseur = poscurseur($montTableau, 1); // c'est cette fonction qui m'intéresserait ! elle positionnerai le curseur de monTableau sur la valeur "test1" (clé = 1)
Car si la fonction poscurseur() positionne le curseur à 1 alors $curseur est systématiquement 1 et celà revient à dire, tout simplement, que :
$curseur = 1;
Car positionner un curseur n'est pas une opération qui implique physiquement le tableau mais c'est une opération logiquement préparatoire qui implique une variable jouant le rôle d'indice de tableau (comme $curseur) Positionner le curseur à 1 s'écrit alors : $curseur = 1;

Quant aux opérations: suivant() ou pécédent(), elles vont agir sur la valeur de l'indice $curseur. Suivant() va faire $curseur++ et Précédent() fera $curseur--

Le curseur $curseur est donc le seul impliqué physiquement par les opérations de positionnement, il est un élément commun (partagé) utilisé par l'ensemble des fonctions de positionnement. Il est donc une variable globale ou partagée.
Modifié en dernier par sadeq le 10 sept. 2008, 16:45, modifié 1 fois.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 169 Messages

10 sept. 2008, 15:51

next() ou previous().
prev() :wink:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

10 sept. 2008, 16:41

Ok, mais je ne citais pas spécialement la fonction prev() intégrée. J'ai édité mon message précédent pour transformer next en suivant et previous en précédent pour plus de clarté.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 169 Messages

10 sept. 2008, 16:46

Ok, c'était juste pour pas que quelqu'un prenne tel quel les informations et post en disant que ça marche pas :wink: Loin de moi l'idée de te corriger :D

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

10 sept. 2008, 17:15

T'as raison :lol:
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Petit nouveau ! | 3 Messages

14 sept. 2008, 12:47

Merci pour vos réponses (avec un peu de retard!)

sadeq tu as raison ma fonction serait inutile dans le cas d'un tableau indexé à partir de 0 et de raison n+1, cependant dans mon cas en fait les clés de mon tableau étaient aléatoires, et j'aurai eu besoin à partir d'une clé connue de pouvoir trouver les clés suivante et précédente.

Enfin j'ai finit par repenser mon code et créer un tableau ordonné à partir de 0 et procéder comme suit :

Code : Tout sélectionner

$maCle = array_search($maValeur, $monTableau); switch($sens) { case 'precedent' : for($i = 0; $i != $maCle; $i++) { $cleCourante = next($montTableau); } $clePrecedente = prev($montTableau); break; case 'suivant' : for($i = 0; $i != $maCle; $i++) { $cleCourante _id = next($montTableau); } $cleSuivante = next($montTableau); break; }