[RESOLU] Recuperer une valeur dans un tableau associatif

Petit nouveau ! | 5 Messages

01 janv. 2014, 11:20

Bonjour,

J'ai une petit sujet de TP.
Il s'agit de faire un code PHP qui permet de donner à l'utilisateur le nombre de calories qui composent l'assiette qu'il va choisir.
Il y a plusieurs règles mais pour l'instant je suis à la règle concernant l'Apéritif. Ce que je n'arrive pas à faire c'est récupérer les calories dans le tableau en fonction de ce que l'utilisateur choisit comme apéritif et l'additionner à la variable $calorieDuRepas.
Voici le code que j'ai fait pour le moment :
function AfficheToutLeMenu($LeRepas){
	foreach($LeRepas as $categorie=>$souscategorie){
	echo "<br/>".$categorie." :<br/><br/>";
		if(is_array($souscategorie)){
			foreach($souscategorie as $nomAliment=>$calories){
				echo $nomAliment."  : ".$calories." calories <br/>";
			}
		}
/*le else n'est pas vraiment utile dans ce cas puisque la souscategorie est toujours un array la mais je le mets quand même...*/
		else
		{
			echo $categorie." : ".$souscategorie." calories <br/>";
		}
	}
}

$Repas=array("Aperitifs"=>array("Noix de cajoux"=>612,"Pistaches"=>617,"Oeufs de lump"=>125),
			"Boissons"=>array("Bierre 33cl"=>178,"flule champagne"=>78,"verre coca"=>180,"perrier"=>0,"verre Whisky"=>384),
			"Dessert"=>array("crème glacé fraise"=>192,"crèpe nature"=>227,"pain au chocolat"=>410,"sorbet"=>90),
			"Coquillages"=>array("12 huitres"=>110,"moules"=>70,"gambas"=>98),
			"Poissons"=>array("anguille"=>250,"caviar"=>275,"daurade"=>77,"perche"=>112,"colin"=>92),
			"Viandes"=>array("agneau"=>280,"andouillette"=>320,"bifteck de boeuf"=>200,"mouton"=>265),
			"Volailles"=>array("poulet"=>150,"dinde"=>260),
			"Feculents"=>array("riz"=>90,"pain blanc"=>255,"pates"=>90,"pomme de terre"=>90),
			"Legumes"=>array("aubergines"=>29,"brocolis"=>34,"champignons"=>28,"chou"=>28,"Haricot vert"=>40),
			"Fruits"=>array("banane"=>90,"fraise"=>36,"mangue"=>62,"pomme"=>52)
			);
			
//J'affiche tout le menu
AfficheToutLeMenu($Repas);

//compteur de calories
$caloriesDuRepas=0;

echo "<br/>";
echo "Voulez vous un Aperitif ?<br/>";
echo "<br/>";

$Aperitif="oui";
//Ceci n'est qu'un test il n y a pas encore de saisie d'utilisateur, je mets donc les valeurs moi même

if($Aperitif=="oui"){
//numerotation me sert juste à affciher une liste 1) 2) 3), je l'enleverai une fois que j'aurais mis de l'html
	$numerotation=0;

//J'affiche les Aperitifs
	foreach($Repas["Aperitifs"] as $nomAliment=>$calories){
		echo ($numerotation+1).")  ".$nomAliment." : ".$calories." calories <br/>";
		$numerotation++;
	}
	
	echo "Quel Aperitif prennez vous ? <br/>";
	$choixAperitif=1;
//Ceci n'est qu'un test il n y a pas encore de saisie d'utilisateur, je mets donc les valeurs moi même
	echo "Votre choix : ".$choixAperitif."<br/>";
	
	switch($choixAperitif){
/* **************zone concernée***************** */
		case 1 :  foreach($Repas["Aperitifs"] as $nomAliment=>$calories){
		$cal=$nomAliment[1];
	}
		$caloriesDuRepas=$caloriesDuRepas+$cal;
	}
/* **************zone concernée***************** */

	echo "Calories :".$caloriesDuRepas;
}
else
{
	//Non complété pour le moment
	echo "Test : Le else fonctionne";
}
Le problème se trouve à la "zone concernée" où je veux récupérer les calories du premier choix.
Est ce que quelqu'un a une solution ?
Merci d'avance ! :mrgreen:

P.S.:Si vous voyez des améliorations que je pourrais apporter à mon code merci de m'en faire part.

Eléphant du PHP | 453 Messages

01 janv. 2014, 15:39

Salut,
Au départ, j'ai pensé à ces deux fonctions : array_search() et array_keys(). Mais en fait, je ne comprends pas bien ce que tu veux faire ? Il y aura un formulaire ?

Si vous voyez des améliorations que je pourrais apporter à mon code merci de m'en faire part.
- Comme je pense que tu es débutant (ce n'est pas un mal en soit, moi aussi j'ai été), je pense que ce tuto va te destabiliser mais t'apprendra beaucoup. Attention, c'est pas facile à manier quand on comprend mal ce type d'algo.

- A mon goût, il y a trop de foreach. Tu peux sûrement tout centraliser dans le premier :

Code : Tout sélectionner

foreach($Repas["Aperitifs"] as $nomAliment=>$calories){ //... }
La Tux attitude avec les kiw'z syou plait
Komodo Edit - Inkscape - Dia

Petit nouveau ! | 5 Messages

02 janv. 2014, 08:48

merci bien de m'avoir répondu,

Seulement lorsque je veux récupérer une valeur stocké dans un tableau associatif, comment est-ce que je pourrais faire. Je donne un exemple exemple :

$tab=array($tab1=>array("nom1"=>$valeur,"nom2"=>$valeur,"nom3"=>$valeur),
$tab2=>array("nom4"=>$valeur,"nom5"=>$valeur,"nom6"=>$valeur)
);

Si je fais un
foreach($tab[$tab1] as $k=>$v)
je me place au niveau de la première colonne cad $tab1, je ne rentrerais donc pas dans $tab2.
Maintenant si je veux récupérer $valeur de "nom1" (et le mettre dans une autre variable au pire) je fais comment ?

J'espère que j'ai été plus concis. :)

Merci bien,

Mammouth du PHP | 2278 Messages

02 janv. 2014, 09:32

Associatif ou pas, un tableau se manipule de la même manière:
INDICES NUMERIQUES
/*création et replissage 1*/
$t = array();
$t[1] = "truc';
$t[2] = "'machin";
$t[3] = $variable_definie_plus_haut;

ou
$t = array(
1 => "truc",
2 => "machin",
3 => $variable_definie_plus_haut;,
)
/*consultation*/
$z = $t[1]; 
ou
$z = $t[$variable_numérique];

INDICES TEXTE
$age = 2013- $annee_naissance ; // saisie auparavant
$t = array( "nom=> "Lafraize", "prenom"=>"Caroline",, "annee_naissance" => $annee_naissance);
$e = $t['nom"'];// donne Lafraize
$champ ="prenom";
$f = $t[$champ];
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Petit nouveau ! | 5 Messages

02 janv. 2014, 22:28

Merci bien,

Eléphant du PHP | 453 Messages

02 janv. 2014, 22:59

Pour illustrer les propos de Sirakawa et les miens, je t'invite à regarder l'image : (repas de la semaine saisis sur un tableur), bien lire le code et l’exécuter :

Code : Tout sélectionner

<?php $lundi = array('a' => 'oeufs mayo','b' => 'pavet de rumsteack','c' => 'frites','d' => 'fromages'); $mardi = array('a' => 'assiette campagnarde','b' => 'salade du chef','c' => '','d' => 'pomme'); $mercredi = array('a' => 'tomate mozza','b' => "dos de merlu sauce à l'oseille",'c' => 'riz','d' => 'tiramitsu'); $repas_de_la_semaine = array('1' => $lundi,'2' => $mardi,'3' => $mercredi); //Attention, c'est un tableau associatif et non pas numérique !!! echo '<pre>'; print_r($repas_de_la_semaine); echo '</pre>'; echo 'Quel est le plat de résistance et de son accompagnement de mercredi ?<br>'; echo $mercredi['b'].' avec du '.$mercredi['c'].'<hr>'; echo 'Quel est le repas complet de lundi ? (2 solutions)<br>'; echo "1. En entrée, c'était ".$lundi['a'].'. Puis le plat était un '.$lundi['b'].' avec '.$lundi['c']."Le dessert était du ".$lundi['d']; echo "<br>2. solution plus arbitraire : <br><ul>"; foreach($lundi as $clef => $valeur){ echo "<li>".$valeur."</li>"; } echo "</ul><hr>"; echo "Quels sont les repas de la semaine ?<br>"; recursive($repas_de_la_semaine); echo "<hr>"; function recursive($arr){ foreach($arr as $k => $v){ if(is_array($v)){ echo "jour ".$k." de la semaine<br>"; recursive($v); }else{ echo $v."<br>"; if($k == 'd'){ echo '<hr>'; } } } } ?>
La Tux attitude avec les kiw'z syou plait
Komodo Edit - Inkscape - Dia