2017-03-22 3 views
0

Ich habe eine Tabelle von Rennen, die die Rennen Name, Rennen id und Renndatum haben.PHP Array Merge Ausgabe

Ich versuche, ein einzelnes Array zu bauen (es hat ein einzelnes Array über einen Funktionsaufruf zurückgegeben werden), die eine Liste der Rennen in folgendem Format enthalten würde:

,,---2017--- 
The Resolution AR, 58, 1.14.2017 
Heartbreaker AR, 59, 2.11.2017 
,,---2016--- 
The Blue Ridge AR, 38, 5.21.2016 
The Fathers Day AR, 43, 6.18.2016 
Adventure Bike (Santos), 54, 7.30.2016 
,,---2015--- 
Gemini Springs AR, 4, 12.14.2015 

Ich bin fast dort! Aber ich habe ein Problem.

Dies ist der aktuelle Code, den ich habe:

function get_races() { 

    // get all the years that have races 
    $years = $wpdb->get_results(" 
     select DATE_FORMAT(r.race_date,'%Y') year 
      from race_calendar r 
     group by DATE_FORMAT(r.race_date,'%Y') 
     order by DATE_FORMAT(r.race_date,'%Y') desc; 
    "); 

    // loop through all years that have races 
    foreach ($years as $year) { 

     // add year header to array 
     $year_header = array(array ('','','---'.$year->year.'---')); 

     // get races for this particular year 
     $races = $wpdb->get_results(" 
      select r.race_name 
        ,r.race_id 
        ,date_format(r.race_date,'%c.%d.%Y') race_date 
       from race_calendar r 
      where DATE_FORMAT(r.race_date,'%Y') = ".$year->year." 
      order by r.race_date; 
     ", ARRAY_N); 

     // merge the year header and the races into an array 
     $merged_arr = array_merge($year_header, $races); 

    } 

    return $merged_arr; 

} 

// call function to get list of races 
$races = get_races(); 

// display the list of races (with the year separator) 
foreach ($races as $race) 
{ 
    echo $race['0'] . ',' . $race['1'] . ',' . $race['2'] . '<br />'; 
} 

Es funktioniert. Aber Problem ist vor nur dieser Code zeigt die letzte Iteration der Jahre Schleife, in diesem Fall :

,,---2015--- 
Gemini Springs AR, 4, 12.14.2015 

Offensichtlich $ merged_arr beginnen wird mit jeder Iteration der Jahre Schleife zurückgesetzt

Wie kann ich es aktualisieren, so dass das resultierende Array in der Funktion die Daten für alle Iterationen der Jahre Schleife enthält?

Antwort

1

Sie können dies alles mit einer einzigen Abfrage tun. Wählen Sie einfach alle Zeilen aus, und durchlaufen Sie dann die Ergebnisse und erkennen Sie, wann sich das Jahr von der vorherigen Iteration ändert, um zu wissen, wann die Trennzeile ausgegeben werden soll.

$last = null; 
$query = <select * from race_calendar order by race_date> 
foreach ($query as $row) { 
    $year = // year of $row['race_date'] 
    if ($year != $last) { 
     // new year, output separator line 
     $last = $year; 
    } 
    // output data line 
} 
+0

Perfekt! Vielen Dank! – mannyotr