Wie speichere ich eine Abfrageergebnismenge als 2D-Array? [Duplikat]
Posted: 23 Jan 2025, 05:55
Ich schreibe ein PHP-Skript, um einige Daten aus einer MYSQL-Datenbank zu extrahieren. Anschließend möchte ich diese Daten nehmen und in einem zweidimensionalen Array speichern. Normalerweise denke ich darüber nach, wenn ich Code wie diesen verwende
Die Ausgabe lautet:
so möchte ich meine Ausgabe haben
das mache ich also in meinem Skript
Im Grunde genommen habe ich in meiner Datenbank eine Tabelle mit den Tabellenständen für eine Frauenliga und die Spalten sind
Alle Verbindungen wurden erfolgreich hergestellt, unten ist meine Anfrage
Ein wichtiger Punkt, den ich nicht bevor ich den nächsten Code zeige, ist, dass es zwei weitere Ranglistentabellen gibt, men_senior und men_intermediate, mit derselben Struktur, aber offensichtlich ändern sich nur die Daten, unten sind die beiden Abfragen nur für den Fall
Jetzt erstelle ich 3 Arrays, in denen ich die Rangliste getrennt für die Damen, Herren Senioren und Herren Mittelstufe führen möchte
Die Daten, die ich im Array anzeigen möchte, sind so
Da ich nun die mehrdimensionalen Ranglistenarrays für alle drei Kategorien erstellen wollte, hätte ich die Abfragen in drei separaten While-Schleifen ausführen können, obwohl ich dachte, ich könnte das gleiche Ergebnis in einer einzigen erreichen und ich hatte das Gefühl, dass es helfen würde, die Leistung zu verbessern. Wenn es besser ist, 3 while-Schleifen zu verwenden, lassen Sie es mich bitte wissen. Was ich versucht habe, ist unten aufgeführt.
Dann möchte ich schließlich nur noch das ausdrucken, was meiner Meinung nach das Array ist, aber ich hole mir dieses angehängte Bild, ich hoffe, Sie können es deutlich sehen

Nur um es noch weiter zu untersuchen, jedes Mal, wenn der 'if'-Block eingegeben wird, I Ich habe einfach alles auskommentiert und dies gepostet, um zu sehen, was passiert zurückgegeben
Die Ausgabe, die ich erhielt, entsprach fast 90 % meinen Anforderungen
Was ich brauche ist zum Beispiel:
Meine Fragen sind
Code: Select all
$test = array();
$test[0]=array();
$test[0]['hello']='hello';
$test[1]=array();
$test[1]['hello']='hello';
$test[2]=array();
$test[2]['hello']='hello';
print_r($test);
Code: Select all
Array ( [0] => Array ( [hello] => hello ) [1] => Array ( [hello] => hello ) [2] =>
Array ( [hello] => hello ) )
das mache ich also in meinem Skript
Im Grunde genommen habe ich in meiner Datenbank eine Tabelle mit den Tabellenständen für eine Frauenliga und die Spalten sind
Code: Select all
team_name, played, won, drawn, lost, for, against, points
Code: Select all
$get_ladies_query = "SELECT
`team_name`, `played`, `won`, `drawn`, `lost`, `for`, `against`, `points`
FROM `standings_ladies` order by pos";
Code: Select all
$get_mens_inter_query = "SELECT
`team_name`, `played`, `won`, `drawn`, `lost`, `for`, `against`, `points`
FROM `standings_men_inter` order by pos";
$get_mens_senior_query = "SELECT
`team_name`, `played`, `won`, `drawn`, `lost`, `for`, `against`, `points`
FROM `standings_men_senior` order by pos";
Code: Select all
$standings_ladies = array();
$standings_men_inter = array();
$standings_men_senior = array();
Code: Select all
array(0=>array(team_name,wins,drawn,lost,for,against,points)
1=>array(team_name,wins,drawn,lost,for,against,points)) and so on
Code: Select all
//I run the 3 queries and store them in the given variables
$result_mens_senior = mysqli_query($link,$get_mens_senior_query);
$result_mens_inter = mysqli_query($link,$get_mens_inter_query);
$result_ladies= mysqli_query($link, $get_ladies_query);
//I want to create 1 while loop so based of the results returned from the 3
//queries so based on the results returned from the 3 queries,
//I get the max number of times I want the query to run
$ladies_boundary = mysqli_num_rows($result_ladies);
$mens_senior_boundary = mysqli_num_rows($result_mens_senior);
$mens_inter_boundary = mysqli_num_rows($result_mens_inter);
$max_size = max(array($ladies_boundary,$mens_senior_boundary,$mens_inter_boundary));
//set an index to start from 0
$index = 0;
//I will only show the example for 1 of the arrays but you get an idea
that this issue will occur for all
while ($index < $max_size)
{
//first, everytime the loop is entered, we need the next row to be fetched
$standings_men_inter_table = mysqli_fetch_assoc($result_mens_inter);
$standings_ladies_table = mysqli_fetch_assoc($result_ladies);
//there is a high chance that the other two tables return a different row size
//so its best to check that we do not go beyond
if($index < $mens_senior_boundary)
{
//we fetch the rows every time we enter the block
$standings_men_senior_table = mysqli_fetch_assoc($result_mens_senior);
//then, this is how I attempt at creating the 2 dimensional array
array_push($standings_men_senior, array(
$standings_men_senior_table['team_name'],
$standings_men_senior_table['played'],
$standings_men_senior_table['won'],
$standings_men_senior_table['drawn'],
$standings_men_senior_table['lost'],
$standings_men_senior_table['for'],
$standings_men_senior_table['against'],
$standings_men_senior_table['points']));
}
//incrementing index each time the loop runs
$index++;
}

Nur um es noch weiter zu untersuchen, jedes Mal, wenn der 'if'-Block eingegeben wird, I Ich habe einfach alles auskommentiert und dies gepostet, um zu sehen, was passiert zurückgegeben
Code: Select all
if($index < $mens_senior_boundary)
{
print_r(mysqli_fetch_assoc($result_mens_senior));
}
Code: Select all
Array
([team_name] => Morley Gaels [played] => 8 [won] => 6 [drawn] => 2
[lost] => 0 [for] => 110 [against] => 83 [points] => 14 )
Array ( [team_name] => Southern Districts [played] => 8 [won] => 3 [drawn] => 2
[lost] => 3 [for] => 104 [against] => 98 [points] => 8 )
Array ( [team_name] => St Finbarrs [played] => 8 [won] => 3 [drawn] => 2
[lost] => 3 [for] => 107 [against] => 99 [points] => 8 )
Array ( [team_name] => Western Shamrocks [played] => 8 [won] => 3 [drawn] => 0
[lost] => 5 [for] => 96 [against] => 88 [points] => 6 )
Array ( [team_name] => Greenwood [played] => 8 [won] => 1 [drawn] => 1
[lost] => 9 [for] => 82 [against] => 109 [points] => 3 )
Code: Select all
Array(0=>Array
([team_name] => Morley Gaels [played] => 8 [won] => 6 [drawn] => 2
[lost] => 0 [for] => 110 [against] => 83 [points] => 14 )
1=>Array
([team_name] => Southern Districts [played] => 8 [won] => 3 [drawn] => 2
[lost] => 3 [for] => 104 [against] => 98 [points] => 8 )..... so on);
- Was stimmt mit meinem Code nicht und wie kann ich ihn dynamisch erstellen?
Mehrdimensionale Arrays in PHP? - Gibt es etwas, das ich an der Funktionsweise von mysql_fetch_assoc und der Rückgabe nicht verstanden habe?
- Gibt es etwas zu verbessern, irgendetwas, was ich tun muss mache ich etwas falsch?