Sven Rautenberg: Bester Lösungsweg?

Beitrag lesen

Moin!

Jetzt mal eine peinliche Frage wie bekomme ich aus den einzelnen arrays ein mehrdimensionales...

SELECT vorname, nachname, telefon, strasse FROM ...
while ($row = mysql_fetch_array ($result)) {
$vorname = $row ["vorname"];
$nachname = $row ["nachname"];
$telefon = $row ["telefon"];
$strasse = $row ["strasse"];
}

// Pseudo-Code
SELECT id, vorname, nachname, telefon, strasse FROM tab ORDER BY nachname ASC
while ($row = mysql_fetch_array ($result)) {
$personen[$id]['vorname'] = $row ["vorname"];
...
}

  
Du kopierst hier viel zuviel rum.  
  

> Ansonsten kannst du bspw. auch vorher ein neues leeres Array (z.B. $personen) anlegen, und nach jedem Schleifendurchgang die jeweiligen Werte deiner Variablen in dieses Array einfügen.  
> ~~~php
  

> $personen = array();  
> ...  
> while ($row = mysql_fetch_array ($result)) {  
> $vorname = $row ["vorname"];  
> ...  
> $personen[] = array("vorname" => $vorname, "nachname" => $nachname, ...);  
> }  
> 

Hier kopierst du noch viel mehr zuviel rum.

Das Resultat von mysql_fetch_array() ist ein Array, dessen Keys die Spaltennamen sind, und dessen Values jeweils einen einzelnen Datensatz enthalten. Dieses Array kann man direkt einem Sammelarray reinreichen, ohne die Felder einzel hin- und herkopieren zu müssen:

  
$personen = array();  
...  
while ($row = mysql_fetch_array ($result)) {  
$personen[] = $row;  

Fertig.

Also im Schnelldurchlauf:

$ids = array(1,2,3,4,5); //Demoliste - irgendwelche IDs, die irgendwoher kommen.
...
array_walk($ids, "intval"); //IDs unbedingt mit intval() in einen Integer wandeln, sonst böse!
$idliste = implode($ids, ","); // Kommaseparierten String erzeugen.

$sql = "SELECT vorname, nachname FROM tabelle WHERE id IN (".$idliste.") ORDER BY nachname ASC";
...query...
...fetchen in Schleife, s.o. ...

- Sven Rautenberg