Zur Navigation

Multi Array

1 webuser

Hallo,
ich brauche eine Abfrage die die Daten so darstellt:
$data = array(
    array(
        "date_from" => "2025-06-30",
        "date_to" => "2025-07-03",
        "class" => "bg-danger text-white",
        "event_name" => "sick leave"
    ),
    array(
        "date_from" => "2025-07-25",
        "date_to" => "2025-07-30",
        "class" => "bg-success text-white",
        "event_name" => "vacation"
    )
);
Versucht habe ich es mit:

  $result = mysqli_query($con, "SELECT von, bis, bemerkung FROM preise where year(von)=year(NOW()) order by von")      ;
                           $rowcount = mysqli_num_rows( $result );


                      $i = 0;
                      $data = array();
                         while($row = mysqli_fetch_array($result)) {

                                 $data['date_from'] = $row[$i]['von'];
                                 $data['date_to'] = $row[$i]['bis'];
                                 //$data['class'] = $row[$i]['type'];
                                 $data['class']= "bg-success text-white";
                                 $data['event_name'] = $row[$i]['bemerkung'];


                         $i++;
                        }

07.08.2025 13:27

2 Jörg Kruse

So erhältst du nur ein eindimensionales Array $data mit dem letzten Eintrag der Query, da $data in jedem Schleifendurchlauf überschrieben wird. Du kannst den Schlüssel $i von $row übernehmen, um ein mehrdimensionales Array aufzubauen:

$i = 0;
$data = array();
while($row = mysqli_fetch_array($result)) {
    $data[$i] = array();
    $data[$i]['date_from'] = $row[$i]['von'];
    $data[$i]['date_to'] = $row[$i]['bis'];
    $data[$i]['class']= "bg-success text-white";
    $data[$i]['event_name'] = $row[$i]['bemerkung'];
    $i++;
}

07.08.2025 14:11 | geändert: 07.08.2025 14:14

3 webuser

Hallo,
danke, es werden in dem Beispiel 7 Datensätze gefunden, aber das Array ist leer:
echo "anz Datensaetze".$rowcount;
"<br>Nur Testweise:";

foreach ($data as $kategorie => $liste) {
    echo "<h3>$kategorie</h3>";
    echo "<ul>";
    foreach ($liste as $produkt) {
        echo "<li>$produkt</li>";
    }
    echo "</ul>";
}

Das ist die Anzeige:
anz Datensaetze7
Nur Testweise
0

date_from

date_to

class

event_name

1

2

3

4

5

6

07.08.2025 15:10

4 Jörg Kruse

Ein Fehler, den ich nachträglich sehe: $row ist kein mehrdimensionales Array, sondern beinhaltet einen einzelnen Datensatz, von daher ist der Gebrauch des Keys $i dort unangebracht:

while ($row = mysqli_fetch_array($result)) {
    $data[$i] = array();
    $data[$i]['date_from'] = $row['von'];
    $data[$i]['date_to'] = $row['bis'];
    $data[$i]['class'] = "bg-success text-white";
    $data[$i]['event_name'] = $row['bemerkung'];
    $i++;
}

... und dann kannst du dir $data ganz einfach mit print_r() ausgeben lassen:

echo '<pre>';
print_r($data);
echo '</pre>';

07.08.2025 15:57 | geändert: 07.08.2025 15:58

1 Forenmitglied fand diesen Beitrag gut

5 webuser

Danke Jörg

07.08.2025 22:24

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]