Retourner la clé d'un tableau d'une valeur contenu dans une chaîne de texte

Répondre


Cette question est un moyen de lutter contre les publications automatisées indésirables.
Émoticônes
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Accéder à davantage d’émoticônes
  Revue du sujet
 

  Étendre la vue Revue du sujet : Retourner la clé d'un tableau d'une valeur contenu dans une chaîne de texte

Re: Retourner la clé d'un tableau d'une valeur contenu dans une chaîne de texte

par Naroth » 11 sept. 2019, 12:52

Le problème principal de l'approche que tu nous propose est que strpos recherche la première occurrence d'une chaîne, strpos peut donc trouver des occurrences contenant la dites chaines

par exemple :

Ici mon objectif est de trouver le département "Loire" (42)
$departements = array(
"groupe1" => "Haute-Loire,Loire, Ain"
"groupe2" => "Loire Atlantique,Rhône, Savoie"
);


Si j'utilise la fonction que je t'ai proposé, la clé qui me sera retournée sera "groupe2" parce que "Loire Atlantique" contient Loire.

Je te conseillerais effectivement de faire un tableau à plusieurs dimensions
$refTerritoire = array (
     "Personne1" => array( "Brandivy","Colpo","Elven","Grand-Champ"...),
     "Personne2" => array("Arradon","Baden","Bono"...)
);
Ce qui évitera toutes possibilités de chaînes présentent dans une autre et de mauvais retour.

Re: Retourner la clé d'un tableau d'une valeur contenu dans une chaîne de texte

par lexarino » 11 sept. 2019, 10:25

Pouahh un grand merci Naroth !
C'est tout bon !

Est-ce qu'une autre approche serait plus conseillée du type double tableau :

Code : Tout sélectionner

$Personne1 = array ("Brandivy","Colpo","Elven","Grand-Champ"...); $Personne2 = array("Arradon","Baden","Bono"...); ...
Et ensuite construire un super tableau :

Code : Tout sélectionner

$refTerritoire = array ($personne1,$personne2,$personne3);
On cherche ensuite la valeur exacte de la commune dans ce "super tableau" ?

Merci pour ton éclairage ! J'aime avoir la solution la plus académique !

Re: Retourner la clé d'un tableau d'une valeur contenu dans une chaîne de texte

par Naroth » 10 sept. 2019, 19:53

Bonsoir,

Vu comment est construit ton tableau tu vas être obligé de chercher dans les valeurs de ton tableau

$refTerritoire = array (
    "Personne1" => "Brandivy,Colpo,Elven,Grand-Champ,Locmaria-Grand-Champ,Locqueltas,Meucon,Monterblanc,Plaudren,Plescop,Saint-Avé,Saint-Nolff,Sulniac,Trédion,Treffléan",
    "Personne2" => "Arradon,Baden,Bono,Île d'Arz,Île-aux-moines,Larmor-Baden,Ploeren,Plougoumelen,Séné,Vannes",
    "Personne3" => "Arzon,La Trinité-Surzur,Le Hézo,Le-Tour-Du-Parc,Saint Gildas de Rhuys,Saint-Armel,Sarzeau,Surzur,Theix-Noyalo",
  );

  $referent = false;
  
  // on ramène la clé du tableau (nom de la personne) qui correspond à la ville interrogée :
  
  // Parcours tout le tableau
  foreach( $refTerritoire as $key => $territoire ) {
  
    //Si la valeur contient "Arradon"
    if( strpos($territoire, "Arradon") !== FALSE ){
        $referent = $key;
    }
  }
  
 // Affiche Personne2. 
echo $referent;

Avec la petite différence que array_search retourne la première clé trouvé, alors qu'ici on retournera la dernière

Retourner la clé d'un tableau d'une valeur contenu dans une chaîne de texte

par lexarino » 10 sept. 2019, 17:36

Bonjour à tous,

Voilà le cas de figure basique pour bon nombre d'entre vous je suis certain !

Code : Tout sélectionner

$refTerritoire = array ( "Personne1" => "Brandivy,Colpo,Elven,Grand-Champ,Locmaria-Grand-Champ,Locqueltas,Meucon,Monterblanc,Plaudren,Plescop,Saint-Avé,Saint-Nolff,Sulniac,Trédion,Treffléan", "Personne2" => "Arradon,Baden,Bono,Île d'Arz,Île-aux-moines,Larmor-Baden,Ploeren,Plougoumelen,Séné,Vannes", "Personne3" => "Arzon,La Trinité-Surzur,Le Hézo,Le-Tour-Du-Parc,Saint Gildas de Rhuys,Saint-Armel,Sarzeau,Surzur,Theix-Noyalo", ); // on ramène la clé du tableau (nom de la personne) qui correspond à la ville interrogée : $referent = array_search('Arradon', $refTerritoire);
Bien entendu ça ne fonctionne pas car ma valeur recherchée est présente dans une chaîne de texte. Mon approche n'est pas la bonne. Quel est le meilleur moyen de construire mon tableau sans avoir à répéter le nom des personnes autant de fois que de communes ?

D'avance merci pour votre aide :D