IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Recherche d'un mot dans un tableau et récupérer la clé


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Responsable d’équipe
    Inscrit en
    Août 2003
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable d’équipe

    Informations forums :
    Inscription : Août 2003
    Messages : 27
    Par défaut Recherche d'un mot dans un tableau et récupérer la clé
    Salux à tous,

    J'ai besoin d'une coup de pouce pour réaliser une recherche d'un mot dans la chaîne d'un tableau afin de récupérer la clé.

    En effet, j'ai utilisé la fonction array_search() qui fonctionne très bien lorsque la case correspond parfaitement.

    Mais j'ai des cas où je n'ai qu'un mot qui est dans la chaîne de caractère et là cela dépasse les compétences de mon apprentissage

    Pour être plus concret voici des extraits de var_dump() et le mot que cherche : MARLIN

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    array(8) {
      [0]=>
      string(19) "PRIX JACQUES GELIOT"
      [1]=>
      string(37) "PRIX DE LA SOCIETE DES COURSES DU PIN"
      [2]=>
      string(22) "PRIX CAPITAINE LABONDE"
      [3]=>
      string(16) "PRIX DES DAGUETS"
      [4]=>
      string(16) "PRIX DE BOULIGNY"
      [5]=>
      string(26) "PRIX COLONEL JEAN DE ROYER"
      [6]=>
      string(27) "PRIX COLONEL BERNARD MARLIN"
      [7]=>
      string(20) "PRIX DES HERONNIERES"
    }
     
    array(8) {
      [0]=>
      string(9) "J. GELIOT"
      [1]=>
      string(15) "STE CSES DU PIN"
      [2]=>
      string(11) "Cne LABONDE"
      [3]=>
      string(7) "DAGUETS"
      [4]=>
      string(8) "BOULIGNY"
      [5]=>
      string(12) "Cel DE ROYER"
      [6]=>
      string(13) "Cel B. MARLIN"
      [7]=>
      string(11) "HERONNIERES"
    }
    Merci d'avance pour l'aide qui me mettra sur le droit chemin.

    GaLaGaNN

  2. #2
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Tu peux t'en tirer avec un simple foreach et stripos:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $myarray = [...];
    $myword = '...';
     
    foreach ($myarray as $k => $v) {
        if (stripos($v, $myword) !== false) {
            $key = $k;
            break;
        }
    }
    plus pratique avec une fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function findKey($needle, $array) {
        foreach ($array as $k => $v) {
            if (stripos($v, $needle) !== false)
                return $k;
        }
        return false;
    }

  3. #3
    Membre averti
    Homme Profil pro
    Responsable d’équipe
    Inscrit en
    Août 2003
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable d’équipe

    Informations forums :
    Inscription : Août 2003
    Messages : 27
    Par défaut
    Merci beaucoup CosmoKnacki !

    Je n'avais pas passé a ce genre de méthode, je pense encore qu'il y une fonction à tous ce que je dois faire.

    J'ai encore plein de truc à apprendre !

    GaLaGaNN

    Edit : le risque est aussi de tomber sur la dernière clé, si rien a été trouvé !

  4. #4
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Tu peux aussi utiliser array_filter ou preg_grep qui servent à filtrer un tableau en conservant les clefs d'origines. L'avantage (si s'en est un dans ton cas) c'est que tu auras tout les items répondant à ton critère (pas seulement le premier). C'est plus lent mais ça ouvre des perspectives.

    array_filter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $result = array_filter($array, function ($i) use ($word) { return stripos($i, $word) !== false; });
    $keys = array_keys($result);
    preg_grep:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $result = preg_grep('~' . preg_quote($word, '~') . '~i', $array);
    $keys = array_keys($result);

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2012
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2012
    Messages : 131
    Par défaut
    Salut,

    http://php.net/manual/en/function.preg-grep.php au cas où le résultat de recherche >1

  6. #6
    Membre averti
    Homme Profil pro
    Responsable d’équipe
    Inscrit en
    Août 2003
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable d’équipe

    Informations forums :
    Inscription : Août 2003
    Messages : 27
    Par défaut
    Salux à tous,

    Je vous post une modification de la fonction qui fonctionne pas mal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function findKey($needle, $array)
    {
    	foreach ($array as $k => $v) {
    		if (stripos($v, $needle) !== false) {
    			$key = $k;
    			break;
    		}
    		else{
    			$key = "99";
    		}
    	}
    	return $key;
    }
    GaLaGaNN

Discussions similaires

  1. [XL-2007] Rechercher des mots dans un tableau et selection
    Par Olivier6464 dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 02/05/2013, 16h57
  2. rechercher un mot dans un tableau de string
    Par sihammaster dans le forum VB.NET
    Réponses: 8
    Dernier message: 02/04/2010, 11h45
  3. Réponses: 5
    Dernier message: 15/03/2007, 06h58
  4. [Tableaux] Recherche d'une chaine dans un tableau
    Par tom06440 dans le forum Langage
    Réponses: 5
    Dernier message: 20/10/2005, 23h27
  5. Recherche d'un mot dans un répertoire
    Par le mage tophinus dans le forum Linux
    Réponses: 7
    Dernier message: 06/05/2005, 16h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo