une piste, un tableau à 2 dim ? GOALLLL !!!!

Mammouth du PHP | 737 Messages

22 sept. 2009, 12:42

Bonjour,

Je fais appel à vous car je n'arrive pas à rentrer dans la logique des tableaux. Pour tout dire, je ne sais pas ce qui est faisable ou préférable à faire dans mon cas. Le voici :

J'ai une liste de personnes que je voudrais répartir dans plusieurs bus.

nom personne bus paris bus toulouse bus marseille
Paul [] [] [] //cases à cocher id 40 (pour PSG), 52 (FCT) et 78 (OM)
Yvan [] [] [] //cases à cocher id 40, 52 et 78 (idem)
Jeanne [] [] [] //cases à cocher id 40, 52 et 78 (idem)

Une personne peut être affectée à plusieurs voyages et peut évidemment changer d'avis.

Mon problème vient du fait que j'ai un doute sur comment gérer d'un côté les personnes et de l'autre les bus tout en faisant la liaison. J'ai pensé à un double foreach en alimentant un tableau mais c'est là que je peine. Suis-je sur la bonne voie ?
C'est un tableau à 2 dimensions qu'il faut générer et alimenter ? #-o

Bien à vous,

Mega
;)
Dyslexics are teople poo

ViPHP
ViPHP | 4039 Messages

22 sept. 2009, 13:18

Ou tout simplement une base de données.. qui gère bien plus efficacement ce genre de problématique qu'un tableau..

Pourquoi ne pas utiliser SQlite, intégré à php ?
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Mammouth du PHP | 737 Messages

22 sept. 2009, 14:24

re,

mais j'ai une base de données :-s

Ca change la donne ? Je ne pense pas...

Mega
;)
Dyslexics are teople poo

ViPHP
ViPHP | 4039 Messages

22 sept. 2009, 15:25

Ah bon, je pensais comprendre que tu parlais de simples arrays() ... :mrgreen:
En même temps, le foreach n'aide pas à la compréhension.

C'est quoi que tu veux dire ? Tu parles de quel tableau ? Ou ça ?
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Mammouth du PHP | 737 Messages

22 sept. 2009, 15:46

Désolé si c'était pas clair.

Et bien imaginons une IHM développé en PHP.

Sur ta page tu as tous les supporters d'un club (on va dire 10, c'est monaco lol)

Tu affiches tous les supporters de ta table dans un tableau avec une série de cases à cocher pour dire telle personne va à tel match et prend donc tel bus. Tu te retrouves avec une liste de bus et une liste de personnes issues de ta base et tables supporters et bus, original,non ?

Chaque ligne de cases à cocher à le même id d'une ligne à une autre. Je pensais à faire en id caché les personnes par un foreach et un autre foreach pour l'id des bus (imaginons 10 bus) pour remplir un voir des arrays (c'est comme un caddie en quelque sorte si je ne m'abuse...)

supporters/bus bus 1 bus 2 bus 3 bus 4 bus 5 bus 6 bus 7 bus 8 bus 9 bus 10
sup 1 [] [] [] [] [] [] [] [] [] []
sup 2 [] [] [] [] [] [] [] [] [] []
sup 3 [] [] [] [] [] [] [] [] [] []
sup 4 [] [] [] [] [] [] [] [] [] []
...
[envoyer]


[] case à cocher, quel graphiste je fais :roll:

Quand j'enregistre via le bouton envoyer ça enregistre ou met à jour en base toutes les infos dans une table de liaisons.
Est-ce plus clair ? Je pouvais gérer le tout via un form et un bouton par ligne mais c'est pas très ergonomique, ni esthétique...

Je me complique la vie c'est ça ? J'ai comme l'impression vue ta réponse.
J'avais pensé à une maj via de l'ajax à chaque clic sur une case à cocher mais c'est p'tet beaucoup de foin pour pas grand chose...

En tout cas merci à toi pour ton aide.

Mega
;)
Dyslexics are teople poo

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

22 sept. 2009, 17:08

Tu es effectivement sur la bonne voie avec tes boucles imbriquées. Il te faut en effet parcourir une première liste contenant les supporters (qui te génèreront les lignes), et pour chaque supporter parcourir une liste contenant les différents bus (qui te génèrerons les colonnes). Enfin, pour chacun de ces bus, il te faut vérifier si le supporter le prend ou non.

Tes deux listes, tu les as déjà en base, et tes deux boucles ne devraient pas poser de problème. Ce qui doit te manquer c'est comment savoir si une case est cochée ou non, et le plus simple pour cela, est effectivement de constituer un tableau à deux dimensions contenant cette information.

On va en fait essayer de constituer le tableau suivant (ou un truc approchant, quand tu auras compris t'en fera ce que tu veux ;)), qui doit correspondre à tous les bus que le supporter prend :
$tableau = array (
  Paul => array ( // Paul prend paris et toulouse
    PSG,
    FCT
  ),
  Yvan => array ( // Yvan marseille
    OM
  )
  Jeanne => array(
    FCT,
    OM
  )
);
(J'ai collé des noms pour que ce soit plus parlant, mais ça marche tout pareil avec des ids)
L'intérêt de ce tableau, c'est que tu vas pouvoir l'intérroger facilement pour vérifier si un couple supporter/bus existe.
Par exemple, je veux savoir si Paul prend le bus pour marseille, j'ai juste a tester la présence de la clé $tableau['Paul']['OM'] (je regarde si mon tableau comporte un index Paul, et si celui-ci est un tableau comportant l'index OM). Si celle-ci existe, c'est qu'il y va a marseille, sinon c'est qu'il n'y va pas.

Ainsi, tu vas pouvoir très facilement mettre au point tes boucles :
foreach ( ... as $hooligan) {
  foreach ( ... as $bus) {
    if (isSet($tableau[$hooligan][$bus]))
      echo $hooligan . ' prend le bus ' . $bus; // tu peux aussi simplement cocher une case ;p
  }
}
L'objectif maintenant étant de constituer le tableau à partir des données que tu dois avoir en base. Mais j'imagine que tu dois avoir une table de bus, une table de supporters et une table te permettant de lier les deux (avec un id issu de chacune des tables). A partir de cette table, un simple while devrait te permettre de le constituer :)

Quant à tes cases à cocher, le plus simple est probablement de nommer de la même manière toutes les cases d'une ligne avec des crochets (ex: paul[], yvan[], ...) et de changer leur valeur en fonction du bus. Lors de la validation du formulaire, tu n'aurais alors qu'à parcourir le tableau $_POST['paul'] pour connaitre les ids de tous les bus qui doivent lui être associés...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 369 Messages

22 sept. 2009, 17:15

Salut,
Bonjour,
Je fais appel à vous car je n'arrive pas à rentrer dans la logique des tableaux. Pour tout dire, je ne sais pas ce qui est faisable ou préférable à faire dans mon cas. Le voici :
J'ai une liste de personnes que je voudrais répartir dans plusieurs bus.
[...]
Aie... Je pensais te proposer 2/3 lignes comme idées mais j'ai passé beaucoup plus de temps lol
de simple aide il devient contribution: Je passe l'url en Edit le temps de le cop/col.

Le problème à présent est: Est-ce que c'est vraiment ce que tu voulais.... A toi de voir.

EDIT: post306909.html#p306909

Mammouth du PHP | 737 Messages

23 sept. 2009, 10:06

Bonjour,

Entre un qui a tout pigé et qui j'me demande s'il n'est pas dans ma tête et un autre qui d'une simple intervention me propose carrément un script (quelque soit sa valeur) que dire si ce n'est un grand MERCI.

Ryle, tu as parfaitement compris ce que je voulais et te remercie de me mettre sur les bons rails. Fuzzy, je vais analyser ta proposition après avoir mis en oeuvre la mienne si tu n'y vois pas d'inconvénient, car c'est moi et moi seul qui doit réaliser cette tâche. La tienne à en revanche l'avantage de proposer quelque chose tournée objet, ce qui n'est pas mon cas. A quand ce fichu déclic procédurier que je suis ? Dans tous les cas, ça m'aidera forcément et je salue cet effort.

Je vais revoir ma copie et vous tiens au courant. Encore merci pour votre soutien, vous incarnez ce(ux) que j'aime sur ce forum...Vous entendez les violons ? Un peu d'auto-dérision et d'humilité ça fait pas de mal :)

Amicalement,

Mega
;)

Ps : le gros fumeur et $hooligan m'ont tué :lol:
Dyslexics are teople poo

Eléphant du PHP | 369 Messages

23 sept. 2009, 10:21

Bonjour,
Entre un qui a tout pigé et qui j'me demande s'il n'est pas dans ma tête et un autre qui d'une simple intervention me propose carrément un script (quelque soit sa valeur) que dire si ce n'est un grand MERCI.
Ryle, tu as parfaitement compris ce que je voulais et te remercie de me mettre sur les bons rails. Fuzzy, je vais analyser ta proposition après avoir mis en oeuvre la mienne si tu n'y vois pas d'inconvénient, car c'est moi et moi seul qui doit réaliser cette tâche. La tienne à en revanche l'avantage de proposer quelque chose tournée objet, ce qui n'est pas mon cas. A quand ce fichu déclic procédurier que je suis ? Dans tous les cas, ça m'aidera forcément et je salue cet effort.
Je vais revoir ma copie et vous tiens au courant. Encore merci pour votre soutien, vous incarnez ce(ux) que j'aime sur ce forum...Vous entendez les violons ? Un peu d'auto-dérision et d'humilité ça fait pas de mal :)
Amicalement,
Mega
;)
Ps : le gros fumeur et $hooligan m'ont tué :lol:
Quand j'ai vu ou j'étais partis, qui plus en lisant la réponse de Ryle, je me suis pris 2 minutes à me demander
si vraiment ca t'interresserait lol ...mais, bah, au cas ou: on sait jamais. Donc, no soucis ;)

@+ bon code ;)

Mammouth du PHP | 737 Messages

28 sept. 2009, 16:09

Bonjour, me revoilà. J'ai bien avancé grâce à vous mais n'arrive pas à isoler les id des cases à cocher pour chaque id de personne (chaque ligne en fait). Grosso modo je récupère toujours l'id de la dernière case cochée connue ainsi que la dernière valeur checked à cause du forach qui passe tout à chaque fois en revue.
Ex : 

Array
(
    [montableau] => Array
        (
            [Paul] => Array
                (
                    [idcase] => 5//en théorie 4
                    [checked] => 1
                )

            [Jeanne] => Array
                (
                    [idcase] => 5
                    [checked] => 1
                )

        )

)
Ci-dessous mon code :
foreach ($_POST["personnes"] as $index => $valeur) {
  foreach ($_POST["lescac"] as $index2 => $valeur2) {
   $macase = isset($_POST['lescac'])? 1 : 0;
    if (!isset($array['montableau'][$valeur])){
	$array['montableau'][$valeur] = array (
    "idcase" => $valeur2,
    "checked" => $macase
    );
}
}
}
Merci de votre aide.

Cordialement,

Mega
;)
Dyslexics are teople poo

Mammouth du PHP | 737 Messages

28 sept. 2009, 16:26

J'ai progressé en comprenant le principe des cases à cocher en amont : Paul [], Jeanne[]...

Il me faut néanmoins parer à l'éventualité ou la personne veut potentiellement se mettre sur 2 destinations.

Car quand je coche OM et Toulouse pour Paul le système garde le dernier en mémoire à savoir Toulouse.

Je dois redescendre d'un niveau ?

Bien à vous,

Mega
;)
Dyslexics are teople poo

Mammouth du PHP | 737 Messages

28 sept. 2009, 16:41

Désolé pour le monologue, le script touche à sa fin ^^

Comment parcourir ce tableau à 3 dimensions ? :boire4: (les 12 travaux d'asterix héhé) :fete:

Mega
;)
Dyslexics are teople poo