2010-05-02 3 views
0

Suite à une question plus tôt aujourd'hui, cette réponse a été donnée pour lire les données dans un tableau et le séparer pour imprimer le type de véhicule, puis des données pour chaque véhicule.formatage des données mysql pour ouptut dans un tableau

<?php 
$sql = "SELECT * FROM apparatus ORDER BY vehicleType"; 
$getSQL = mysql_query($sql); 
// transform the result set: 
$data = array(); 
while ($row = mysql_fetch_assoc($getSQL)) { 
$data[$row['vehicleType']][] = $row;  
} 
?> 
<?php foreach ($data as $type => $rows): ?> 
<h2><?php echo $type?></h2> 
<ul> 
    <?php foreach ($rows as $vehicleData):?> 
    <li><?php echo $vehicleData['name'];?></li> 
    <?php endforeach ?> 
    </ul> 
<?php endforeach ?> 

Ceci est presque parfait pour ce que je veux faire, mais je dois imprimer deux colonnes de la base de données par exemple Ford et mondeo avant d'entrer dans la deuxième boucle de foreach. J'ai essayé d'imprimer $ rows ['model'] et toutes les autres combinaisons auxquelles je peux penser mais ça ne marche pas. Toute aide très appréciée

+0

ne comprenez-vous pas que le tableau '$ vehicleData' contient la machine détails? Donc, le modèle devrait être stocké dans ce tableau, pas dans les lignes $ –

+0

non je ne m'en suis pas rendu compte. Voulez-vous dire un tableau séparé? J'ai vraiment du mal avec les tableaux donc toute explication appréciée – bsandrabr

Répondre

0

Je suis un peu confus par votre question mais le SELECT * dans l'instruction SQL signifie que chaque colonne de la base de données doit être présente comme une paire clé => valeur dans le tableau $ row. Donc, si vous avez besoin d'une autre "colonne", sortie ici dans un élément de la liste HTML <li>, vous venez d'echo (note: pas "print") ce nom de colonne comme une clé de tableau. Donc, si vous avez besoin du type de la colonne de voiture trouvée dans une colonne avec le nom « modèle » que vous feriez ceci:

<?php 
$sql = "SELECT * FROM apparatus ORDER BY vehicleType"; 
$getSQL = mysql_query($sql); 
// transform the result set: 
$data = array(); 
while ($row = mysql_fetch_assoc($getSQL)) { 
$data[$row['vehicleType']][] = $row;  
} 
?> 
<?php foreach ($data as $type => $rows): ?> 
<h2><?php echo $type?></h2> 
<ul> 
    <?php foreach ($rows as $vehicleData):?> 
    <li><?php echo $vehicleData['name'];?></li> 
    <li><?php echo $vehicleData['model'];?></li> 
    <?php endforeach ?> 
    </ul> 
<?php endforeach ?> 

EDIT: Je suis toujours pas clair sur votre question, mais si chaque voiture a la même vehicleType, et vous êtes à la recherche d'attraper qu'une fois avant une boucle à travers tous les résultats, je devine que ce sera le faire:

<?php 
// Set up a SQL query to grab one row 
$query_to_grab_only_vehicle_type = "SELECT vehicleType FROM apparatus WHERE 1 LIMIT 0,1"; 
// Fetch that row and turn it into an array 
$vehicle_type_array = mysql_fetch_array(mysql_query($query_to_grab_only_vehicle_type)); 
// Initialize a variable with the array value that came from the vehicleType column 
$vehicle_type = $vehicle_type_array['vehicleType']; 
// You could uncomment and use the following to echo out the variable 
// echo "Vehicle type: $vehicle_type"; 

$sql = "SELECT * FROM apparatus ORDER BY vehicleType"; 
$getSQL = mysql_query($sql); 
// transform the result set: 
$data = array(); 
while ($row = mysql_fetch_assoc($getSQL)) { 
$data[$row['vehicleType']][] = $row;  
} 
?> 
<?php foreach ($data as $type => $rows): ?> 
<h2><?php echo $type?></h2> 
<ul> 
    <?php foreach ($rows as $vehicleData):?> 
    <li><?php echo $vehicleData['name'];?></li> 
    <li><?php echo $vehicleData['model'];?></li> 
    <?php endforeach ?> 
    </ul> 
<?php endforeach ?> 
+0

Merci, oui les données sont présentes et je peux en faire écho comme vous me le suggérez mais cela me donnerait de nombreux échos de modèle. J'en ai besoin avant la boucle pour que ça ne soit répercuté qu'une fois et jusqu'à $ rows car vehicleData n'existe pas – bsandrabr

+0

C'est la boucle while qui vous donne "beaucoup d'échos", donc il semble que vous pourriez vouloir initialiser le tableau une fois. Dans ce cas, appelez ceci: "$ singleRow = mysql_fetch_array ($ getSQL)" Cela ne ferait qu'initialiser un tableau, par opposition à l'initialisation du tableau pour chaque élément de la ligne. Vous pouvez appeler ceci en conjonction avec une LIMIT 0,1 afin que vous ne tiriez aucune ligne dont vous n'avez pas besoin. – buley

+0

La boucle while extrait toutes les données dont j'ai besoin: ford mondeo, hardtop bleu, ford mondeo, softtop rouge, la réponse donnée donne> ford, hardtop bleu, ford, softop rouge. Ce dont j'ai besoin est ford mondeo, hardtop bleu, softop rouge – bsandrabr

Questions connexes