[PHP] Recherche dans un array (next, prev..)

Résolu/Fermé
Odissea Messages postés 5 Date d'inscription mardi 14 septembre 2010 Statut Membre Dernière intervention 15 septembre 2010 - 14 sept. 2010 à 16:31
Odissea Messages postés 5 Date d'inscription mardi 14 septembre 2010 Statut Membre Dernière intervention 15 septembre 2010 - 15 sept. 2010 à 14:34
Bonjour,

Je voulais savoir si l'un d'entre vous pourrait me donner un coup de pouce ...
J'expose mon soucis.

J'ai un moteur de recherche en PHP/Mysql ...
J'effectue une recherche, celui-ci me retourne X résultats
Lorsque je clique sur un des résultats, une page m'affiche les détails du résultat.
Je souhaite à partir de la voir deux liens qui me permettrait d'aller au résultat suivant et précédent.

Au départ j'avais juste fait un +1 ou -1 sur la ref ... mais cela fait que je fais suivant sur TOUTES les données de la base ... et pas seulement sur la recherche effectuée.

En clair, ma requête retourne 1, 8, 9, 12, 15 ,16, 25 ... je suis sur le résultat [b]12[/b] ... je voudrais pouvoir afficher un lien me permettant d'aller au [b]9[/b] ou au [b]15[/b] ...
J'ai essayé avec les fonction in_array, current, next, prev ... mais je m'en sort pas ...

Ma variable est une variable de session qui stock les "id" de la requete $_SESSION['resulat'] = (a,b,c,d,e,f);

La fonction que je créé explode d'abord la variable session ... et la a partir d'ici je sèche ^^

Merci pour votre aide ...

Cordialement
A voir également:

4 réponses

Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
14 sept. 2010 à 16:35
il faudrait que tu fasse une variable de session 'current id' qui dit quelle valeur de ressort de ton 'resultat' ..; un index qui tu pourras incrémenter ou décrémenter facilement.

par cotnre, attention avec la session: si la personne fait 2 recherches sur 2 pages différentes, tu risques d'avoir des conflits !
0
Odissea Messages postés 5 Date d'inscription mardi 14 septembre 2010 Statut Membre Dernière intervention 15 septembre 2010
15 sept. 2010 à 11:13
En fait donc j'ai une variable session qui récupère les ID de ma requête
Ma variable :
$_SESSION['search'] = 1, 8, 9, 12, 15 ,16, 25

Ma fonction :
nextprev($id) {
// Je split la variable session
$ref_explode = explode(",", $_SESSION['search']);
// J'obtient une variable array nommée $ref_explode (1;8;9;12;15;16;25)

// En fonction de $id je voudrais récuperer les id précédents et suivants
// si $id = 12 je voudrais que $next soit = à 15 et $prev = 9


return ($next,$prev);
}

Je ne sais pas comment traiter la 2nde étape de ma fonction ... (en souligné gras)

Merci pour votre aide.
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
15 sept. 2010 à 11:54
Bonjour,

Tu peux parcourir ton tableau et trouver manuellement les valeurs, ou alors utiliser la fonction array_search().
Pour la première méthode :
function nextprev($id) {
    // Je split la variable session
    $ref_explode = explode(",", $_SESSION['search']);
    // J'obtient une variable array nommée $ref_explode (1;8;9;12;15;16;25)

    $next = false;
    $prev = false;
    // On parcourt l'ensemble du tableau jusqu'à ce qu'on tombe sur $id
    foreach ($ref_explode as $key => $value)
    {
        if ($value == $id)
        {
            $next = (isset($ref_explode[$key + 1])) ? $ref_explode[$key + 1] : false;
            $prev= (isset($ref_explode[$key - 1])) ? $ref_explode[$key - 1] : false;
            break;
        }
    }

    return ($next, $prev);    
}

Si $next === false, cela signifie qu'il n'y a pas de suivant. Idem pour $prev. (Il faut bien utiliser le triple égal dans tes tests, pour différencier le cas ou $next (resp. $prev) vaut 0 du cas où il vaut FALSE).

La deuxième méthode est plus longue à l'exécution car l'ensemble du tableau est parcouru, mais plus simple à coder.

Xavier
0
Odissea Messages postés 5 Date d'inscription mardi 14 septembre 2010 Statut Membre Dernière intervention 15 septembre 2010
15 sept. 2010 à 14:34
Merci Xav, t'es un chef !
0