Renommer array après avoir effectué un explode de explode

Résolu
Southstyle Messages postés 46 Date d'inscription   Statut Membre Dernière intervention   -  
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   -
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

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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']);

0
Southstyle Messages postés 46 Date d'inscription   Statut Membre Dernière intervention  
 
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
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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 ;
}
0
Southstyle Messages postés 46 Date d'inscription   Statut Membre Dernière intervention  
 
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
0
Southstyle Messages postés 46 Date d'inscription   Statut Membre Dernière intervention  
 
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.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Un $ en trop
$class et non $iclass
0