Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework
Zend Framework Forum d'entraide sur la programmation PHP avec Zend Framework. Avant de poster -> FAQ ZF, Cours ZF
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/07/2011, 18h19   #1
Membre régulier
 
Inscription : août 2008
Messages : 402
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 402
Points : 79
Points : 79
Par défaut trié un fetchAll avec les regex, je peux faire plus simple ?

Bonjour, j'essaye de trier après un fetchAll(); j'ai réussi a faire ce que je voulais mais je ne sais pas si je peux faire plus simple.

voici 2 tulpes de bas base de donnée je les obtiens avec ce script sur le controleur
Code :
1
2
3
 
        $sql=$table_car->fetchAll();
        $this->view->voitures=$sql->toArray();
sur la vue voici ce que ça donne avec un var_dump($this->voiture)
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
 
array
  0 => 
    array
      'id' => string '1' (length=1)
      'nom' => string '106' (length=3)
      'prix' => string '15000' (length=5)
      'year' => string '2011' (length=4)
      'km' => string '23005' (length=5)
      'couleur' => string 'blue' (length=4)
      'meca' => string 'semi-automatique' (length=16)
      'nb_meca' => string '5' (length=1)
      'energie' => string 'solaire' (length=7)
      'fisco' => string '100' (length=3)
      'caros' => string 'berline' (length=7)
      'decrit' => string 'voiture ancienne' (length=16)
      'foto_show' => string 's1' (length=2)
      'mini1' => string 'm1' (length=2)
      'mini2' => string 'm2' (length=2)
      'mini3' => string 'm3' (length=2)
      'mini4' => string 'm4' (length=2)
      'big1' => string 'b1' (length=2)
      'big2' => string 'b2' (length=2)
      'big3' => string 'b3' (length=2)
      'big4' => string 'b4' (length=2)
  1 => 
    array
      'id' => string '2' (length=1)
      'nom' => string 'sariz' (length=5)
      'prix' => string '99000' (length=5)
      'year' => string '3000' (length=4)
      'km' => string '12201111' (length=8)
      'couleur' => string 'metal ' (length=6)
      'meca' => string 'atiomique' (length=9)
      'nb_meca' => string '5' (length=1)
      'energie' => string 'solaire' (length=7)
      'fisco' => string '0' (length=1)
      'caros' => string 'camion' (length=6)
      'decrit' => string 'derni�re technologique' (length=22)
      'foto_show' => string 's2' (length=2)
      'mini1' => string 'm5' (length=2)
      'mini2' => string 'm6' (length=2)
      'mini3' => string 'm7' (length=2)
      'mini4' => string 'm8' (length=2)
      'big1' => string 'b5' (length=2)
      'big2' => string 'b6' (length=2)
      'big3' => string 'b7' (length=2)
      'big4' => string 'b8' (length=2)
mon but:

d'afficher tous ce qu'il y a dans le premier tulpe 0,
c'est une annonce de voiture par exemple, je mes des donnée sur le voiture en question et ensuite les photo, une fois le tuple fini, je passe a la suivante , ansi de suite, le poblème de fetchAll(), c'est que les données sont rangé par colonne et moi je veux par ligne

j'ai donc décider de filter toute les image, toute les information dans un tableau selon sont type, si c'est une image elle ira dans $image[] si c'est une info dans $info[] etc ..

voici ma vu qui trie les informations

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
 
//var_dump($this->voitures);
foreach($this->voitures as $tulpe)
{
 
    foreach($tulpe as $key=>$resultat)
    {
        if(preg_match("#[^mini|^big|^show]#",$key))
        {
            $info[] = $resultat;
        }
        if(preg_match("#mini#",$key))
        {
           $image[]=$resultat;
        }
 
        if(preg_match("#big#",$key))
        {
            $imagebig[]=$resultat;
        }
 
        if(preg_match("#show#",$key))
        {
                 $imagefirst=$resulat;
        }
 
 
    }
}
 
var_dump($mini);
?>
avant de commencer plus loin je souhaite savoir si je peux faire plus simple ??

je ne sais pas si j'ai bien formulé ma question?

je vous remercie de vos suggestions
keokaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 18h54   #2
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 678
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 678
Points : 1 041
Points : 1 041
Je n'ai pas compris ton histoire de trie sur colonne et tri sur ligne, peux tu expliquer?
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 19h23   #3
Membre régulier
 
Inscription : août 2008
Messages : 402
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 402
Points : 79
Points : 79
mon but serais d'afficher ceci avec une boucle foreach

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
 
//-----------------------------------id=1-1er boucle-------------------------
modèle: 106;
kilometrage:1000km;
prix:1000euro
 
image_principal :<img href="image/s1.jpg">
image miniuature:
<a href="image/grosseimage1.jpg><img href="image/p1.jpg">
<a href="image/grosseimage2.jpg><img href="image/p2.jpg">
<a href="image/grosseimage3.jpg><img href="image/p3.jpg">
<a href="image/grosseimage4.jpg><img href="image/p4.jpg">
 
//-----------------------------------id=2-----2ème boucle---------------------
modèle: 206;
kilometrage:2000km;
prix:1000euro
 
image_principal :<img href="image/s1.jpg">
image miniuature:
<a href="image/grosseimage5.jpg><img href="image/p5.jpg">
<a href="image/grosseimage6.jpg><img href="image/p6.jpg">
<a href="image/grosseimage7.jpg><img href="image/p7.jpg">
<a href="image/grosseimage8.jpg><img href="image/p8.jpg">
c'est ca ce que je veux afficher, le problème c'est que avec un fetchAll je ne peux pas le faire puisqu'il va me sortire ceci si je fait une boucle foreach
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
 
modèle: 106;
modèle: 206;
kilometrage:1000km;
kilometrage:3000km;
prix:1000euro
prix:15500euro
image_principal :<img href="image/s1.jpg">
image_principal :<img href="image/s2.jpg">
image miniuature:
<a href="image/grosseimage1.jpg><img href="image/p1.jpg">
<a href="image/grosseimage2.jpg><img href="image/p2.jpg">
<a href="image/grosseimage3.jpg><img href="image/p3.jpg">
<a href="image/grosseimage4.jpg><img href="image/p4.jpg">
<a href="image/grosseimage5.jpg><img href="image/p5.jpg">
<a href="image/grosseimage6.jpg><img href="image/p6.jpg">
<a href="image/grosseimage7.jpg><img href="image/p7.jpg">
<a href="image/grosseimage8.jpg><img href="image/p8.jpg">
c'est ce que j'ai dans ma vu et ce que je souhaite c'est d'afficher fiche par fiche(le tuple1 on va dire toute les info sur la ligne id=1, puis le tulpe2 pourles info id=2 etch ...

voici la vu c'est pas tous à fait les même nom par contre mais je corrigerai
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
 
 
<div class="caracteristique">
 
    <p><a href="#">voitures</a></p>
    <table>
        <tr>
            <th>modèle</th>
            <th>prix</th>
            <th>Année</th>
            <th>kilometrage</th>
            <th>couleur</th>    
            <th>transmission mecanique</th>
            <th>carrosserie</th>       
            <th>enregie</th>
            <th>nombre de chevaux fiscaux</th>
            <th>description</th>
            <th>phto principal </th>
 
 
        </tr>
 
 
 
        <?php foreach ($this->voitures as $car) : ?>
            <tr>
                <td><?php echo $this->escape($car->nom); ?></td>
                <td><?php echo $this->escape($car->prix); ?></td>
                <td><?php echo $this->escape($car->year); ?></td> 
                <td><?php echo $this->escape($car->km); ?></td>
                <td><?php echo $this->escape($car->couleur); ?></td>
                <td><?php echo $this->escape($car->meca); ?></td>  
                <td><?php echo $this->escape($car->caros); ?></td>
                <td><?php echo $this->escape($car->energie); ?></td>
                <td><?php echo $this->escape($car->fisco); ?></td>  
                <td><?php echo $this->escape($car->decrit); ?></td>        
            </tr>
        <?php endforeach ?> 
</div>
 
<div class="gallerie">
 
<ul>
<div class="show">
    <?php foreach ($this->voitures as $car) : ?>
               <?php  echo '<a href="image/big/'.$this->escape($car->big1).'.jpg" rel="lightbox"><img src="image/mini/'.$this->escape($car->mini1).'.jpg"/></a>'; ?>
               <?php  echo '<a href="image/big/'.$this->escape($car->big2).'.jpg" rel="lightbox"><img src="image/mini/'.$this->escape($car->mini2).'.jpg"/></a>'; ?>    
               <?php  echo '<a href="image/big/'.$this->escape($car->big3).'.jpg" rel="lightbox"><img src="image/mini/'.$this->escape($car->mini3).'.jpg"/></a>'; ?>
               <?php  echo '<a href="image/big/'.$this->escape($car->big4).'.jpg" rel="lightbox"><img src="image/mini/'.$this->escape($car->mini4).'.jpg"/></a>'; ?>    
    <?php endforeach; ?>
</div>
</ul>
 
</div>
 
<div class="show">
    <?php foreach ($this->voitures as $car) : ?>
       <?php echo '<img src="image/show/'.$this->escape($car->foto_show).'.jpg">';?>
    <?php endforeach; ?>
</div>
vois tu mon problème ?

je pourrais utliser cette solution mais on m'a tous dit qu'il fait éviter des boucles de requête

Code :
1
2
3
4
5
6
 
$sql = 'SELECT * FROM bugs WHERE bug_id = ?';
for( $i = 1; $coutn($sql) <11; $i++)
{
$result = $db->fetchAll($sql, $i); //ici le résultat est goupé par tulpe puisqu'on veux toute les info de la ligne 1, puis la ligne 2 etc ...
}
keokaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 19h28   #4
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 678
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 678
Points : 1 041
Points : 1 041
Et pourquoi ne fais tu pas ta base de données dans l'ordre que tu souhaite ?

Car le jour ou je fais un foreach pour ça j'arrête la programmation

Après tu peux spécifier les champs que tu récupère sur la table dans ta requête dans l'ordre que tu souhaites
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 19h39   #5
Membre régulier
 
Inscription : août 2008
Messages : 402
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 402
Points : 79
Points : 79
Code :
1
2
 
	Et pourquoi ne fais tu pas ta base de données dans l'ordre que tu souhaite ?
comment je fait pour lui dire

Code :
1
2
3
4
5
 
donne moi toutes les données des champs qui se trouve sur le 1er id
donne moi toutes les données des champs qui se trouve sur le 2er id
donne moi toutes les données des champs qui se trouve sur le 3er id
etc...
car après si j'ai ceci sous forme de table je peux aisément faire
Code :
1
2
3
4
5
6
7
8
9
 
echo" <table>";
for ($id=1; $id<$imax;$i++)
{
echo $nom[$i] = $champ$i
echo $image[$i] = $ iamge $i
}
 
echo "</table>";

il faut peu être ne pas utliser le fetchAll?
keokaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 19h42   #6
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 678
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 678
Points : 1 041
Points : 1 041
Attend on va faire plus simple.

Tu veux afficher quoi exactement un exemple concret avec le schema de la table
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 19h46   #7
Membre régulier
 
Inscription : août 2008
Messages : 402
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 402
Points : 79
Points : 79
voici ma table voiture simplifier

Code :
1
2
3
4
5
6
7
8
 
table voitures
 
id| model | image
--------------------
0 | 106   |  image1 
1 | 107   |  image2
2 | 108   | image 3
le résultat de l'affichage
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
 
id= 0
 
model= 106 
 
<img src="image1.jpg">
------------------
id= 1
 
model= 107
 
<img src="image2.jpg">
 
-----------------
id= 2
 
model= 108
 
<img src="image2.jpg">
normalement c'est simple comme affichage mais avec un fetch All je ne sais pas faire
keokaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 19h56   #8
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 678
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 678
Points : 1 041
Points : 1 041
Admettons que tu aie ton modèle voitures

Dans l'action de ton controller :
Code :
1
2
3
4
 
$Tvoitures = new Application_Model_DbTable_Voirtures();
$rowset = $Tvoitures->fetchAll();
$this->view->voitures = $rowset;
Dans ta vue :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
<table>
<tr>
     <th>ID</th><th>MODEL</th><th>IMAGE</th>
</tr>
<?php 
foreach($this->voitures as $voiture){
     echo '<tr>';
     echo '<td>'.$voiture->id.'</td><td>'.$voiture->model.'</td><td>'.$voiture->image.'</td>';
     echo '</tr>';
}
?>
</table>
ça ne te vas pas ça ?
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/07/2011, 20h06   #9
Membre régulier
 
Inscription : août 2008
Messages : 402
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 402
Points : 79
Points : 79
AH ok

je me suis fait avoir, la première fois j'avais utiliser ceci le plus simple mais c'était tous "dans le désordre", je n'avais pas mis de CSS, donc j'ai mal interpréter le résultat, je me suis dis qu'il me mettais un résultat qui n'est pas dans l'ordre




merci a toi, si j'avais réessayer j'aurai encore chercher pendant longtemps

c'est un problème de mise en forme et pas de résultat de la requête.

avec des image de différente taille, c'est très mal rangé sans CSS
keokaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 20h10   #10
Membre régulier
 
Inscription : août 2008
Messages : 402
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 402
Points : 79
Points : 79
c'est fait
keokaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 20h10   #11
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 678
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 678
Points : 1 041
Points : 1 041
Pas de soucis n’oublie pas de marqué ton sujet comme résolu si c'est bon
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h28.


 
 
 
 
Partenaires

Hébergement Web