Comment chercher dans un tableau en PHP

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par Zecat, 20 Décembre 2010.

  1. Zecat
    Zecat WRInaute accro
    Inscrit:
    1 Mars 2005
    Messages:
    9 177
    J'aime reçus:
    0
    je rame sur un truc tout simple :

    j'ai un tableau $tab :

    Code:
    $tab[0]="001|xxxxxxxxxxxxx";
    $tab[1]="123|aaaaaaaaaaaaaaaaa";
    $tab[2]="018|cccccccccc";
    $tab[3]="017|dddddd";
    .
    . 
    $tab[nnn]="002|aaaaaa";
    $tab[nnn]="044|mmmmmmmmmmm";
    nnn pouvant etre compris entre 10 et un millier

    et je veux trouver par un cherche dans tableau le rang de la ligne qui contient :

    "017|"

    Je trouve pas la bonne méthode (autrement qu'en bouclant et en testant ! :-/)

    array_search() semble de chercher que des valeurs exactes ... a moins qu'on puis mettre un joker et dire recherche la valeur "017|*"

    * etant le joker ?

    PS : si je suis finalement obligé de faire un foreach ... : peut on arreter un foreach avant la fin ?

    Code:
    foreach()
    {
        if (j'aitrouvé)
        {
            SORTIR DU FOREACH ??????
        }
     
    }
     
  2. Blount
    Blount WRInaute impliqué
    Inscrit:
    18 Novembre 2010
    Messages:
    707
    J'aime reçus:
    0
    Re: Je merdouille sur un search in tableau ...

    N'hésite pas à utiliser la balise CODE.

    Sinon, oui, tu peux stopper la boucle (while, for, etc.) avant la fin :
    Code:
    foreach ($tabs AS $value) {
        if (yes) {
            break;
        }
    }
    
    Sinon, là comme ça, je ne vois pas de fonction déjà existante.
     
  3. Zecat
    Zecat WRInaute accro
    Inscrit:
    1 Mars 2005
    Messages:
    9 177
    J'aime reçus:
    0
    Re: Je merdouille sur un search in tableau ...

    sorry pour la balise j'avais oublié ... c'ets corrigé

    bon finalement comme ce tableau vient d'un file, je vais faire un file get contents au lieu du file et puis un strpos suivi d'un substr ...
     
  4. Blount
    Blount WRInaute impliqué
    Inscrit:
    18 Novembre 2010
    Messages:
    707
    J'aime reçus:
    0
    Re: Je merdouille sur un search in tableau ...

    Si ça vient d'un fichier, utilises plutôt fopen.

    La différence est que file_get_contents récupère le contenu de tout le fichier, alors qu'avec fopen, tu vas simplement récupérer les données une ligne par une ligne et déplacer un curseur.
    Tu éviteras une consommation inutile de mémoire.
     
  5. Zecat
    Zecat WRInaute accro
    Inscrit:
    1 Mars 2005
    Messages:
    9 177
    J'aime reçus:
    0
    Re: Je merdouille sur un search in tableau ...

    Dans le cas d'espece je prefere faire un unqiue get content suivi d'un strpos et hop c'est trouvé plutot que 500 accès ligne par ligne si le tableau fait 500 lignes ...

    Je me trompe peut etre mais je sens confusement que 1 get content et 1 strpos ca consomme moins que 500 acces ligne a ligne. Ensuite de toute façon une fois ma chaine trouvée ma variable $texte ayant recu le get content est raz ...
     
  6. forummp3
    forummp3 WRInaute passionné
    Inscrit:
    8 Février 2004
    Messages:
    1 519
    J'aime reçus:
    0
    Re: Je merdouille sur un search in tableau ...

    salut,

    je te conseil d'inserer ton tableau dans une bdd.

    Si ton format est toujours tu du 000|letltres et qu'il n'y a jamais de | (barre) dans tes lettres, alors tu peux utiliser la fonction explode a chaque ligne.

    sinon:




    foreach($tab as $value)
    {
    $ligne=explode("|",$value);

    if($ligne[0]=="017")
    {
    echo "ligne trouvé"; break;
    }

    }
     
  7. Zecat
    Zecat WRInaute accro
    Inscrit:
    1 Mars 2005
    Messages:
    9 177
    J'aime reçus:
    0
    Re: Je merdouille sur un search in tableau ...

    Je suis un grand consommateur de foreach et explode en cascade ... mais la je persiste a considérer que plutot qu'un

    file
    foreach
    explode
    test

    avec une boucle qui tourne 500 ou 1000 fois

    un get content
    et un strpos

    ca consommera moins ... et ca sera plus veloce. Si le php etait un langage compilé je dis pas mais en interprété, je pense que y a pas photo.
     
  8. forummp3
    forummp3 WRInaute passionné
    Inscrit:
    8 Février 2004
    Messages:
    1 519
    J'aime reçus:
    0
    Re: Je merdouille sur un search in tableau ...

    mais quel est ton cas specifique ? car comme je te l'ai dis, si tu dois faire ce test plusieurs fois, mieux vaux mettre ces infos dans la bdd, c'est fait pour, il y a des index. Aprés si ton fichier change toutes les secondes, faut faire le test en direct, ou bien alors de demander a la personne qui t'envoie ce tableau de le mettre en bdd et de te faire une page de test, par exemple tu appel la page verif_exist.php?chaine=017

    Donc, ton tableau, il sort d'ou? est ce qu'il change? a quel rythme ? est ce que c'est une page distante? une page locale ?
     
  9. Leonick
    Leonick WRInaute accro
    Inscrit:
    8 Août 2004
    Messages:
    19 415
    J'aime reçus:
    0
    essaie avec array_filter et comme fonction de filtrage en utilisant un preg_match du genre "^nnn"
    plutôt que file_get_contents je préfère utiliser file qui te renvoie le fichier sous forme de tableau. Comme ça ton fichier est plus concis : 1 ligne dans le fichier c'est une ligne dans le tableau
     
  10. Zecat
    Zecat WRInaute accro
    Inscrit:
    1 Mars 2005
    Messages:
    9 177
    J'aime reçus:
    0
    Heu non ... j'ai besoins de la suite ... mon fichier sur disque :

    001|aaaaaaaa|
    018|xxxxxxxxxxxxxxxx|
    004|zzzzzzzzzzzzz|
    etc (10 à 1000 lignes)

    Donc pour le moment je passe pas par file mais par in file get content puis je fais :
    strpos avec "018|" comme valeur (1018 n existe pas donc pas de risque)
    puis un substr de $pos+4 à la fin
    strrpos avec "|" comme valeur
    me reste plus qu'a faire un substr de la bonne longueur (de 0 sur longueur $pos) pour recupérer xxxxxxxxxxxx

    Donc je fait pas une boucle sur 1000 si mon occurence est a la fin ... je serais passé par un tableau si la fonction de recherche dans tableau permettait de dire :

    cherche "018|*" * etant un joker
     
  11. Zecat
    Zecat WRInaute accro
    Inscrit:
    1 Mars 2005
    Messages:
    9 177
    J'aime reçus:
    0
    Re: Je merdouille sur un search in tableau ...

    C'est pas la question ... j'ai ce fichier en entrée et je ne veux pas modifier cet aspect ...
     
  12. Leonick
    Leonick WRInaute accro
    Inscrit:
    8 Août 2004
    Messages:
    19 415
    J'aime reçus:
    0
    justement, tu peux, avec des regex dans ta fonction de filtrage de tableau
    Code:
    $filtrage=array_filter($tableau_donnees,$ok4key);
    function $ok4key($var){
    global $cle_a_trouver;
    return (preg_match("#^$cle_a_trouver#i",$var)>0);}
    si $cle_a_trouver n'est pas modifiée durant l'appel, autant utiliser une constante
    et quand tu as obtenu ton tableau filtré, tu fais un explode et tu as ton contenu
     
Chargement...
Similar Threads - chercher tableau PHP Forum Date
rechercher une sous-valeur dans un tableau Développement d'un site Web ou d'une appli mobile 13 Avril 2011
Encart "Rechercher des résultats sur" Référencement Google 10 Janvier 2020
Les commandes Google before: et after: pour chercher par dates Référencement Google 10 Avril 2019
Indexer ou non page monsite.fr/rechercher Débuter en référencement 15 Février 2017
Comment rechercher "éfficacement" un blog sur sa thématique ! Débuter en référencement 24 Juin 2015
Moteur de rechercher interne - Résultats similaires Débuter en référencement 8 Janvier 2014
Faut il payé un outil pour rechercher ses backlinks et ceux de ses concurents? Netlinking, backlinks, liens et redirections 19 Septembre 2013
Qu'est-ce que "Rechercher.aguea"? Débuter en référencement 4 Mars 2013
Problème de réécriture d'url. Je vois plus ou chercher URL Rewriting et .htaccess 14 Septembre 2012
Expression régulière pour rechercher/remplacer Dreamweaver Développement d'un site Web ou d'une appli mobile 5 Décembre 2011
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice