JeuWeb - Crée ton jeu par navigateur
De la base de données à la vue : afficher les instances des zones des cartes - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : De la base de données à la vue : afficher les instances des zones des cartes (/showthread.php?tid=5264)

Pages : 1 2 3


RE: De la base de données à la vue : afficher les instances des zones des cartes - Dexyne - 22-02-2011

Oui je le parcours d'un sens mais ce n'est pas ce que je cherche à faire, c'est juste pour avoir un boucle avec un $i qui s'incrémente de façon à l'avoir ensuite dans ma variable $instances[$i]->nom_instance et afficher le nom en conséquence, le sizeof() me permet d'avoir le nombre totale d'entrée pas de les lires, enfin le programme le fai peut-être mais ce n'est pas ce que je veux faire xD Enfin bon je dois avoir ma vision de la chose et de ce qu'il se passe ^^'.

EDIT1 : Nosrehl ta solution marche bien a une chose près c'est de virer la boucle for sinon il me répète le echo plusieurs fois inutilement mais merci de l'avoir proposé ^^.
Je vais tester celle de Sephy maintenant :p

EDIT2 :

$instances = array(
array('name' => 'Blackwing Descent', 'zone_name' => 'Blackrock Mountain', 'map_name' => 'Eastern Kingdoms'),
array('name' => 'Blackrock Caverns', 'zone_name' => 'Blackrock Mountain', 'map_name' => 'Eastern Kingdoms'),
array('name' => 'Bastion of Twilight', 'zone_name' => 'Twilight Highlands', 'map_name' => 'Eastern Kingdoms'),
array('name' => 'Throne of the Four Winds', 'zone_name' => 'Uldum', 'map_name' => 'Kalimdor')
);
Pour le array faut que je le construise dans le model, le contrôleur ou la vue ? (je pense pas à la vue mais je sais pas trop où le construire).


RE: De la base de données à la vue : afficher les instances des zones des cartes - Sephi-Chan - 22-02-2011

Dans le contrôleur, je dirais (tu prépares les données du modèles à être affichées dans la vue).

Et après dans la vue, tu l'exploites comme ça :


<?php foreach($instances_by_zones_by_map as $map => $zones): ?>
<h2><?php echo $map; ?></h2>
<ul>
<?php foreach($zones as $zone => $instances): ?>
<li>
<h3><?php echo $zone; ?></h3>
<ul>
<?php foreach($instances as $instance): ?>
<li><?php echo $instance->name ; ?></li>
<?php endforeach; ?>
</ul>
</li>
<?php endforeach; ?>
</ul>
<?php endforeach; ?>



Sephi-Chan


RE: De la base de données à la vue : afficher les instances des zones des cartes - Dexyne - 22-02-2011

J'y suis presque mais il me manque une chose c'est de récupérer et de ranger tous les éléments, là je crois qu'il garde que le dernier élément lu et le range dans $map_key et $zone_key ce qu'il fait que le array() n'affiche qu'une partie de ce que je veux mais je pense pouvoir trouvé la solution xD.


RE: De la base de données à la vue : afficher les instances des zones des cartes - Sephi-Chan - 22-02-2011

C'est que tu as dû te planter quelque part. Peux-tu afficher le print_r de ton tableau de départ et du tableau d'arrivée ?


Sephi-Chan


RE: De la base de données à la vue : afficher les instances des zones des cartes - Dexyne - 22-02-2011




RE: De la base de données à la vue : afficher les instances des zones des cartes - Sephi-Chan - 22-02-2011

Et ton code, c'est quoi ?


RE: De la base de données à la vue : afficher les instances des zones des cartes - Dexyne - 22-02-2011

Ah oui xD


$instances_by_zones_by_map = array();
foreach($instances as $listeInstances){ }

$inst = array();
for($i = 0; $i < sizeof($instances); $i++) {
$inst['name'] = $instances[$i]->nom_instance;
$inst['zone_name'] = $instances[$i]->nom_zone;
$inst['map_name'] = $instances[$i]->nom_map;
}

foreach($instances as $instance){
$map_key = $inst['map_name'];
$zone_key = $inst['zone_name'];

// Alternative : if(array_key_exists($map_key, $instances_by_zones_by_map) == false){
if(!$instances_by_zones_by_map[$map_key]){
$instances_by_zones_by_map[$map_key] = array();
}

if(!$instances_by_zones_by_map[$map_key][$zone_key]){
$instances_by_zones_by_map[$map_key][$zone_key] = array();
}
if ($instance->nom_zone == $zone_key)
$instances_by_zones_by_map[$map_key][$zone_key][] = $instance;
}

Pour le moment je l'ai fait dans la vue en attendant ta réponse précédente, mais je changerais après.
Y'a le if() que j'ai mis parce que sinon il mettait toutes les entrées dans $instances_by_zones_by_map mais après je suppose que c'est plus complexifié par rapport au début XD.


RE: De la base de données à la vue : afficher les instances des zones des cartes - Sephi-Chan - 22-02-2011

Essaye juste comme ça :


$instances_by_zones_by_map = array();
foreach($listeInstances as $instance){
$map_key = $instance->nom_map;
$zone_key = $instance->nom_zone;

$instances_by_zones_by_map[$map_key][$zone_key][] = $instance;
}


Sephi-Chan


RE: De la base de données à la vue : afficher les instances des zones des cartes - Dexyne - 22-02-2011

Merciiiiiiiiiiiii Sephiiiiiiiiiiiiiiiii :amoureux:.

Y'avait juste une variable qui fallait renommer sinon je me tapait une erreur pour non objet déclaré, ce qui donne au final :

$instances_by_zones_by_map = array();
foreach($instances as $instance) {
$map_key = $instance->nom_map;
$zone_key = $instance->nom_zone;

$instances_by_zones_by_map[$map_key][$zone_key][] = $instance;
}

vu que $listeInstances est en faite créer via le foreach de mon exemple précédent mais dans ce cas-ci il n'existe plus ^^.
Par contre du coup j'ai du mal à comprendre l'utilité de ces lignes auparavant puisqu'elle n'y sont plus ici xD :

if(!$instances_by_zones_by_map[$map_key]){
$instances_by_zones_by_map[$map_key] = array();
}

if(!$instances_by_zones_by_map[$map_key][$zone_key]){
$instances_by_zones_by_map[$map_key][$zone_key] = array();
}



RE: De la base de données à la vue : afficher les instances des zones des cartes - Sephi-Chan - 23-02-2011

PHP permet de déclarer plusieurs niveau de tableau en une seule passe. Inutile donc de le faire individuellement si la clé n'est pas déjà un tableau.


Sephi-Chan