Wie speichere ich eine Abfrageergebnismenge als 2D-Array? [Duplikat]Php

PHP-Programmierer chatten hier
Guest
 Wie speichere ich eine Abfrageergebnismenge als 2D-Array? [Duplikat]

Post by Guest »

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

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);
Die Ausgabe lautet:

Code: Select all

Array ( [0] => Array ( [hello] => hello ) [1] => Array ( [hello] => hello ) [2] =>
Array ( [hello] => hello ) )
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

Code: Select all

team_name, played, won, drawn, lost, for, against, points
Alle Verbindungen wurden erfolgreich hergestellt, unten ist meine Anfrage

Code: Select all

$get_ladies_query = "SELECT
`team_name`, `played`, `won`, `drawn`, `lost`, `for`, `against`, `points`
FROM `standings_ladies` order by pos";
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

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";
Jetzt erstelle ich 3 Arrays, in denen ich die Rangliste getrennt für die Damen, Herren Senioren und Herren Mittelstufe führen möchte

Code: Select all

$standings_ladies = array();
$standings_men_inter = array();
$standings_men_senior = array();
Die Daten, die ich im Array anzeigen möchte, sind so

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
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.

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++;

}
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
Image

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));
}
Die Ausgabe, die ich erhielt, entsprach fast 90 % meinen Anforderungen

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 )
Was ich brauche ist zum Beispiel:

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);
Meine Fragen sind
  • 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?
Ich danke Ihnen für die Lektüre. Ich habe versucht, so detailliert wie möglich zu beschreiben, was ich versucht habe.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post