Implode et boucle foreach
Bonjour,
J'ai cherché sur le net le moyen de réponse à mon problème et en désespoir de cause je me tourne vers vous.
Je cherche à faire un implode et une concanation sur une double boucle foreach mais j'ai hélas l'impression que c'est impossible. Je souhaiterais en avoir confirmation et si cela est confirmé comment je dois faire pour réussir à regrouper mes données.
Mon code est le suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| <?php
$req=$connexion->prepare("
select h_lieu,h_dt2, h_ev, h_lat,h_long from historique WHERE h_lieu='BLOIS' or h_lieu='chateau de blois'
"); // on va chercher tous les membres de la table qu'on trie par ordre croissant
$req->execute(); // On éxecute la requète
//Préparation des variables pour la boucle foreach
$titre='';
$stitre='';
$i=0;
//Première boucle foreach
foreach ($donnees=$req->fetchALL(PDO::FETCH_ASSOC|PDO::FETCH_GROUP) as $info => $bul) // Lancement de la boucle
{
($info);
$bul[0]['h_lat'];
$bul[0]['h_long'];
if( !empty( $bul[0]['h_lat']))
{
$info_lat = $bul[0]['h_lat'];
}
if( !empty( $bul[0]['h_long']))
{
$info_long = $bul[0]['h_long'];
}
//Concanation des données de la première boucle foreach. Ici ça fonctionne
if($titre!='') $titre.=',';
$titre.='["'.$info.'",'.$info_lat.','.$info_long.']';
//Deuxième boucle foreach
foreach ($bul as $bul)
{
$bul['h_dt2'];
$bul['h_ev'];
if( !empty( $bul['h_dt2']))
{
$info_dt2 = $bul['h_dt2'];
}
if( !empty( $bul['h_ev']))
{
$info_ev = $bul['h_ev'];
}
// la concanation fonctionne mais je n'arrive pas à regrouper les données.
if($stitre!='');
$stitre.='["'.$info_dt2.'<br/>'.$info_ev.'"]';
}//Fermeture de la deuxième boucle foreach
}//Fermeture de la première boucle foreach
?> |
Merci d'avance à ceux qui prendront le temps de me lire.
Astroma
J'ai un problème avec le code
désolé de revenir mais j'ai un problème avec une ligne de ton code :
J'ai fais comme ça :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| <?php
$req=$connexion->prepare("
select h_lieu,h_lat, h_long, h_dt2,h_ev
FROM historique
WHERE h_lieu='BLOIS' or h_lieu='chateau de blois'
ORDER BY h_lieu,h_lat
"); // on va chercher tous les membres de la table qu'on trie par ordre croissant
$req->execute(); // On éxecute la requète
//Création des variables
$i=0;
$keys = array();
$evts = array();
$titres = array();
while ($donnees = $req-> fetch(PDO::FETCH_ASSOC))
{
$key = "($donnees['h_lieu']);($donnees['h_lat']);($donnees['h_long'])";
$id = array_search($key,$keys,true);
if ($id=== false)
{
$id=$i++;
$keys[$id] = $key;
$data[$id] = array($donnees['h_lieu'],$donnees['h_lat'], $donnees['long']);
}
$evts[$id][] = $donnees['h_dt2'].''.$donnees['h_ev']; // Concatenation dates et événements
}//Fermeture de la boucle while
foreach ($keys as $id=$key)
{
$titres[] =
'["'.$data[$id][0].'"'
.','.$data[$id][1]
.','$data[$id][2]
.'"'.implode('<br />', $evts[$id]).'"'
.']';
}
?> |
J'ai cette erreur là qui arrive
Code:
Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in C:\wamp\www\wekisto1\test105.php on line 37
La ligne 37 c'est celle-ci :
Code:
$key = "($donnees['h_lieu']);($donnees['h_lat']);($donnees['h_long'])";
J'essaye de la modifier depuis ton message mais rien à faire j'ai toujours l'erreur ?
Merci encore pour ton aide
Astroma
Encore un problème avec mes excuses.
Voila en fait j'avais besoin de récupérer mes infos à partir d'une variable dans la requete SELECT.
le problème que je rencontre est que $row recupére bien les lignes que je demande mais avec le passage à$key elles sont écrasées. Et seul la dernière est conservé. Si vous pouvez me donner quelques conseils merci.
Voici le code
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| foreach ($theme as $cle1=>$theme1)// la clé sert à fixer un chiffre à chaque mot
{
// connexion SQL
$sql = <<<SQL
SELECT
h_lieu,
h_lat,
h_long,
h_dt2,
h_ev
FROM
historique
WHERE
h_id='$theme1'
ORDER BY
h_lieu,
h_lat,
h_long
SQL;
$stmt = $connexion->prepare($sql);
$stmt->execute();
//Création des variables
$i=0;
$keys = array();
$evts = array();
$titres = array();
$tableauLieux='';
while($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
$key = "{$row['h_lieu']};{$row['h_lat']};{$row['h_long']}";
$id = array_search($key, $keys, true);
if ($id === false)
{
$id = $i++;
$keys[$id] = $key;
$data[$id] = array($row['h_lieu'], $row['h_lat'], $row['h_long']);
}
$evts[$id][] = $row['h_dt2'].' '.$row['h_ev'];// Concatenation dates et événements
echo '<pre>';
print_r($keys);
echo '</pre>';
}//Fermeture de la boucle while
}
foreach($keys as $id => $key)
{
$titres[] .=
'"'.$data[$id][0].'"'
.','.$data[$id][1]
.','.$data[$id][2]
.',"'.implode('<br />', $evts[$id]).'"'
.'';
}
$titre = array ();
foreach($titres as $element)
{
if($tableauLieux!='') $tableauLieux.=',';
$tableauLieux.='['.$element.']';
echo $tableauLieux; // affichera $prenoms[0], $prenoms[1] etc.
} |
Avec un grand merci d'avance
Astroma