Page 1 sur 1

Recuperer une valeur dans un tableau associatif

Posté : 01 janv. 2014, 11:20
par ouryhamdalaye
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.

Re: Recuperer une valeur dans un tableau associatif

Posté : 01 janv. 2014, 15:39
par niuxe
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){ //... }

Re: Recuperer une valeur dans un tableau associatif

Posté : 02 janv. 2014, 08:48
par ouryhamdalaye
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,

Re: Recuperer une valeur dans un tableau associatif

Posté : 02 janv. 2014, 09:32
par sirakawa
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];

Re: Recuperer une valeur dans un tableau associatif

Posté : 02 janv. 2014, 22:28
par ouryhamdalaye
Merci bien,

Re: [RESOLU] Recuperer une valeur dans un tableau associatif

Posté : 02 janv. 2014, 22:59
par niuxe
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>'; } } } } ?>