Page 1 sur 1

Tableau 2 dimensions

Posté : 30 janv. 2013, 19:06
par xpdesignstudio
Bonjour à tous

Je cherche à balayer un tableau à deux dim mais je peine un peu..

J'ai des marques composées de modèles

Dans l'exemple ci-après

J'ai juste 2 marques et un modèle.

Voila mon code
$marques_sql=Doctrine_Core::getTable('Marque')->getmarques();

$tab=array();
$i=0;
foreach($marques_sql as $marque){
$tab[$i]['id']=$marque['id'];
$tab[$i]['marque']=$marque['marque'];

$modeles_sql=Doctrine_Core::getTable('Modele')->getbymarque($marque['id']);
$j=0;

foreach($modeles_sql as $mod){
	$tab[$i][$j]['id']=$mod['id'];
	$tab[$i][$j]['mod']=$mod['modele'];
	$j++;
}

$i++;
}

après un var_dump j'obtiens ca :

Code : Tout sélectionner

array 0 => array 'id' => string '1' (length=1) 'marque' => string 'peugeot' (length=7) 0 => array 'id' => string '2' (length=1) 'mod' => string '406' (length=3) 1 => array 'id' => string '2' (length=1) 'marque' => string 'renault' (length=7)
et bizarrement quand je balaye mes datas:
foreach($tab as $marque){
	echo $marque['marque'];
foreach($marque as $modele){
	echo $modele['mod'];	
}

}
j'obtiens ceci :

marque :peugeot
modele :1p406

renault
2r

Merci pour votre aide

Re: Tableau 2 dimensions

Posté : 30 janv. 2013, 21:03
par xTG
Ton code de balayage ne reflète pas l'affichage que tu nous donnes.
Pas de echo 'marque', pas de echo 'modèle'.
On ne peut donc te dire ce qui ne va pas, car ton code de balayage tel que tu nous le présente est tout à fait correct.

Re: Tableau 2 dimensions

Posté : 30 janv. 2013, 23:11
par xpdesignstudio2
en effet

bizarrement, voila ce qu'il ressort alors que je n'ai que deux marques et un modèle


le balayage :
foreach($tab as $marque){
        echo 'marque : ' .$marque['marque'].  "<br />";
foreach($marque as $modele){
        echo 'modele : ' .$modele['name'].  "<br />"; 
}

}
donne :

marque : peugeot
modele : 1
modele : p
modele : 406
marque : renault
modele : 2
modele : r

encore une fois le var_dump affiche pourtant ceci :

Code : Tout sélectionner

0 => array 'id' => string '1' (length=1) 'marque' => string 'peugeot' (length=7) 0 => array 'id' => string '2' (length=1) 'name' => string '406' (length=3) 1 => array 'id' => string '2' (length=1) 'marque' => string 'renault' (length=7)

Re: Tableau 2 dimensions

Posté : 31 janv. 2013, 09:36
par xTG
Mea culpa ta boucle était bien incorrecte...
Le souci qu'on observe est que dans $marque tu as bien les index numériques mais aussi les index alphanumériques !
Et ensuite on a une drôle d'interprétation de l'index name alors qu'il n'existe pas toujours, name doit être converti en entier pour accéder à la variable de type String et est tout simplement converti en 0.
foreach($tab as $marque){
        echo 'marque : ' .$marque['marque'].  "<br />";
foreach($marque as $key => $modele){
  if( is_numeric($key) )
        echo 'modele : ' .$modele['name'].  "<br />";
}

}

Re: Tableau 2 dimensions

Posté : 31 janv. 2013, 10:32
par Mazarini
Bonjour,

Je pense que tu devrais utiliser des objets.

un objet modele avec comme propriété id, nom
Un objet marque avec comme propriété id, nom et un tableau de modèle

Je pense que ca simplifierai ta gestion des données.

Si tu veux travailler uniquement avec des tableaux, utilise plutot :

$tab[$i]['id']=$marque['id'];
$tab[$i]['marque']=$marque['marque'];
$tab[$i]['modeles']=array(); // Pas de modèle renseigné au début
et ensuite
$tab[$i]['modeles'][$j]['id']=$modele['id'];
$tab[$i]['modeles'][$j]['mod']=$modele['mod'];