[RESOLU] Combler trou dans Array

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Combler trou dans Array

Re: Combler trou dans Array

par [Compte supprime] » 08 janv. 2014, 16:50

Merci pour vos réponses !
J'ai choisi celle de Mazarini tout simplement car elle prendra en compte tous les lieux et cela même si ça passe au dessus de 5. Mais merci yann18 pour ton aide.

Pour info, il manque une parenthèse mais je l'ai trouvé :mrgreen:
if (!isset($tab[$annee][$lieu])) $tab[$annee][$lieu] = 0;

En tout cas, j'ai dû aussi faire une faute quelque part, car je mettrais ma main à couper qu'après ton premier post, j'ai corrigé à l'identique !!! Enfin bon, le principal, ça fonctionne !

Merci! :wink:

Re: Combler trou dans Array

par Mazarini » 08 janv. 2014, 15:53

foreach($Tlieux as $lieu=>$l {
   foreach($Tannee as $annee=>$a {
       if (!isset($tab[$annee][$lieu]) $tab[$annee][$lieu] = 0;
   }
}
J'ai oublié mes lunettes ce matin et c'est très chaud pour voir l'écran :oops:
Ca me semble mieux maintenant.

Re: Combler trou dans Array

par yann18 » 08 janv. 2014, 15:48

Bonjour,

Merci pour votre réponse.

En voyant votre réponse, je me suis rendu compte que je pouvais enlever mon IF sur lieu1 et lieu2 pour le mettre directement dans am requête SQL.
Par contre, dans votre exemple, je dois connaître le nombre de lieux. Je m'étais arrêter à 2, mais je peux potentiellement en avoir 3, 4 ou 5.
tu peux créer un tableau des lieux avec une taille donnée et l'initialiser à 0:

$nbLieux=5;//nombre de lieux
for($i=1; $i<=$nbLieux;$i++ ){
$lieuxTab['LIEU'.$i] = 0; 
}


$query_compt_st = $bdd->query('SELECT lieu, YEAR(date_cpa) annee, COALESCE(SUM(compt_nb),0) + COALESCE(SUM(compt_c),0) as total_compt
FROM CP_ANALYSE cp
INNER JOIN LIEUX l ON cp.id_lieu = l.id_lieu
GROUP BY lieu, YEAR(date_cpa)
ORDER BY lieu, YEAR(date_cpa)');


while ($row = $query_compt_st->fetch()) {
 
      if (!isset($tab[$row['annee']])) {     
           $tab[$row['annee']]=$lieuxTab;      
      }
    $tab[$row['annee']][$row['lieu']] = $row['total_compt'];
   
}
$query_compt_st->closeCursor();


Re: Combler trou dans Array

par [Compte supprime] » 08 janv. 2014, 15:43

Merci pour votre réponse.

J'ai essayé d'incorporer le code mais je n'y arrive pas. Il y a plusieurs erreurs de "[" "]".. etc... Mais je n'arrive pas à comprendre ce morceau là pour corriger :
if (!isset($tab$annee']]$lieu])

Re: Combler trou dans Array

par Mazarini » 08 janv. 2014, 15:29

Tu peux profiter re ta lecture pour faire une table des lieux et un table des années en ajoutant :
$Tannee[$row['annee']] = 0;
$Tlieux[[$row['lieu']] = 0;
Ensuite tu parcours ces 2 tableaux pour boucher les trous
foreach($Tlieux as $lieu=>$l {
   foreach($Tannee as $annee=>$a {
       if (!isset($tab$annee']]$lieu]) $tab[$annee']]$lieu] = 0;
   }
}

Re: Combler trou dans Array

par [Compte supprime] » 08 janv. 2014, 14:36

Bonjour,

Merci pour votre réponse.

En voyant votre réponse, je me suis rendu compte que je pouvais enlever mon IF sur lieu1 et lieu2 pour le mettre directement dans am requête SQL.
Par contre, dans votre exemple, je dois connaître le nombre de lieux. Je m'étais arrêter à 2, mais je peux potentiellement en avoir 3, 4 ou 5.

Re: Combler trou dans Array

par yann18 » 08 janv. 2014, 13:26

bonjour,



$query_compt_st = $bdd->query('SELECT lieu, YEAR(date_cpa) annee, COALESCE(SUM(compt_nb),0) + COALESCE(SUM(compt_c),0) as total_compt
FROM CP_ANALYSE cp
INNER JOIN LIEUX l ON cp.id_lieu = l.id_lieu
GROUP BY lieu, YEAR(date_cpa)
ORDER BY lieu, YEAR(date_cpa)');


while ($row = $query_compt_st->fetch()) {
 
      if (!isset($tab[$row['annee']])) {
          $tab[$row['annee']]['LIEU1'] = 0;          
           $tab[$row['annee']]['LIEU2'] = 0;      
      }
    $tab[$row['annee']][$row['lieu']] = $row['total_compt'];
   
}
$query_compt_st->closeCursor();


Combler trou dans Array

par [Compte supprime] » 08 janv. 2014, 11:44

Bonjour,

J'aimerais ajouter des entrées dans un Array.
ci-joint le code :
$query_compt_st = $bdd->query('SELECT lieu, YEAR(date_cpa) annee, COALESCE(SUM(compt_nb),0) + COALESCE(SUM(compt_c),0) as total_compt
FROM CP_ANALYSE cp
INNER JOIN LIEUX l ON cp.id_lieu = l.id_lieu
GROUP BY lieu, YEAR(date_cpa)
ORDER BY lieu, YEAR(date_cpa)');

$lieu_vide = array_fill(1, 1, 0);
while ($row = $query_compt_st->fetch()) {
    if ($row['lieu'] == 'LIEU1' || $row['lieu'] == 'LIEU2') {   
      if (!isset($tab[$row['annee']][$row['lieu']])) {
          $tab[$row['annee']][$row['lieu']] = $lieu_vide;          
      } 
    $tab[$row['annee']][$row['lieu']] = $row['total_compt'];
    }
}
$query_compt_st->closeCursor();
ça me donne le tableau suivant :
Array
(
    [2006] => Array
        (
            [LIEU1] => 7500
        )
    [2007] => Array
        (
            [LIEU1] => 2500
            [LIEU2] => 2550
        )
    [2013] => Array
        (
            [LIEU1] => 2451
            [LIEU2] => 10674
        )
    [2014] => Array
        (
            [LIEU2] => 5000
        )
)
C'est pour ensuite afficher un graphique. J'ai certains lieux qui n'ont pas les mêmes années. Et si jamais ils n'ont pas une entrée par année, le array pour le graphique affiche ligne par ligne donc ça décale tout et le graphique est faux.

J'ai ajouté la boucle IF qui ne fonctionne pas et qui est sûrement très fausse au niveau du code. Mais J'ai essayé d'adapter avec un autre bout de code.
Il faudrait juste par exemple pour 2006, ajouter "LIEU2" avec zéro.... Et inversement "LIEU1" avec zéro pour l'année 2014.
J'ai beau lire et relire les tutoriaux sur les tableaux, mais dès qu'ils ont plusieurs niveaux avec un while, je suis totalement perdu !!!

Merci pour votre aide !! :wink: