Renommer array après avoir effectué un explode de explode [Résolu/Fermé]

Signaler
Messages postés
45
Date d'inscription
mardi 17 avril 2012
Statut
Membre
Dernière intervention
8 novembre 2018
-
Messages postés
29590
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 septembre 2020
-
Bonjour,

Je ne peux pas dire "tout est dit dans le sujet" car c'est incompréhensible en l'état :-)

Je souhaiterais manipuler des données de manière plus aisée, afin de les récupérer ensuite. Voici ce que j'ai sous forme de texte (nom court=nom long=répertoire)
$vartxt = "10B=10ème Section B=13
10C=10ème Section C=14
10G=10ème Section G=15
11A=11ème Section A=20
11B=11ème Section B=21";

Je crée d'abord un array afin de séparer chaque ligne car chacune représente un élément différent :
$classes = explode("\r\n",$vartxt);

Ensuite j'aimerais extraire chaque élément de chaque ligne, je fais donc encore une fois :
$iclass = 0;
do {
$classinfos[] = explode("=",$classes[$iclass]);
$iclass++;
}
while(!empty($classes[$iclass]));


Super, ça fonctionne. Mais voilà, maintenant je souhaite travailler sur la ligne de l'élément 10G en l'appelant par son nom court ou par son répertoire par exemple, et non pas par son numéro de array (qui est définit par PHP selon l'ordre dans lequel il apparaît et qui ne me parle pas au moment où je veux récupérer l'information).

EXEMPLE :
Je veux connaître le numéro du répertoire de 10G (ou son nom complet). Comment je peux atteindre ces informations avec les arrays que je viens de créer ?
La ligne correspond à $classinfos[2], et le numéro du répertoire serait $classinfos[2][2], mais moi je souhaite connaître l'information à partir d'une demande formulée comme "Dis-moi quel est le répertoire de la classe 10G".

J'espère que ma question est assez claire pour être répondue :-)

D'ores et déjà merci d'avoir pour votre aide !

Raph

1 réponse

Messages postés
29590
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 septembre 2020
2 791
Bonjour,

Rien de plus simple :

$vartxt = "10B=10ème Section B=13
10C=10ème Section C=14
10G=10ème Section G=15
11A=11ème Section A=20
11B=11ème Section B=21";

$classes = explode("\r\n",$vartxt);

$arrayFinal = array();
foreach($classes as $V){
  $arrV = explode('=',$V);
  $arrayFinal[$arrV[0]] = $arrV;
}

echo "<pre>";
  print_r($arrayFinal);
echo "</pre>";

echo "10G =><br>";
print_r($arrayFinal['10G']);

Messages postés
45
Date d'inscription
mardi 17 avril 2012
Statut
Membre
Dernière intervention
8 novembre 2018

Salut Jordane,

Merci pour ta réponse rapide.
Je ne suis pas sûr de bien comprendre... comment par exemple trouverais-tu le nom complet de la classe 10G sur une URL telle que fichier.php?classe=10G

$classe = $_GET['classe'];
$nomcomplet = $arrayFinal[$classe[1]]; // Cette ligne ne marche pas


Merci pour ton aide.

Raph
Messages postés
29590
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 septembre 2020
2 791
As tu au moins pris la peine de tester le code que je t'ai donné ?
Si tu l'avais fait, je pense que tu ne m'aurais pas posé la question... les divers print que j'y ai placé te montrant à quoi ressemble l'array final et l'exemple que je te donne répond à ta nouvelle question...

Mais pour y répondre :
//récupération PROPRE d'une variable GET avant de l'utiliser :
$classe = !empty($_GET['classe']) ? $_GET['classe'] : NULL;

//si la variable existe et n'est pas vide ...
if($classe){
    //récupération du nom complet
   $nomcomplet = !empty($arrayFinal[$classe]) ? $arrayFinal[$classe][1] : NULL;
    echo $nomcomplet ;
}
Messages postés
45
Date d'inscription
mardi 17 avril 2012
Statut
Membre
Dernière intervention
8 novembre 2018

Attends attends... j'avais fait une faute de frappe, j'avais inclu un [ ] dans un autre [ ] au lieu de faire [ ] [ ]
Donc là d'après les premiers tests, ÇA MARCHE !
Je te remercie d'avoir lu, compris et répondu à ma question ! :-) Et bravo.

Raph
Messages postés
45
Date d'inscription
mardi 17 avril 2012
Statut
Membre
Dernière intervention
8 novembre 2018

Encore une question :
Est-ce irréversible ?
Si je veux utiliser les deux systèmes ensemble, on dirait que ça ne fonctionne pas :
Exemple :
// $totalclasses a été compté plus haut avec array_count();
$iclass = 0;
do {
	echo $$arrayFinal[$iclass][0]." a comme nom complet ".$$arrayFinal[$iclass][1]." et est sauvegardé dans le répertoire ".$$arrayFinal[$iclass][2];
	$iclass++;
}
while($iclass < $totalclasses);

Je n'obtiens que des valeurs vides.
Messages postés
29590
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 septembre 2020
2 791
Un $ en trop
$class et non $iclass