Mailinglisten-Archive |
> Hallo Michael, > > Michael Borchers wrote: >> $table_array = array(); >> >> while($table_row = mysql_fetch_array($this->db_result)) >> { >> foreach($this->mysql_num_fields_array as $field) >> { >> $table_array[][$field] = $table_row[$field]; >> } >> } > > Wie soll denn das $table_array am Ende aussehen? > Assoziativ mit Feldnamen oder indiziert mit Feldnummern? > > Laut Handbuch zu mysql_fetch_array: > > "mysql_fetch_array() ist eine erweiterte Version von mysql_fetch_row(). > Die > Daten werden sowohl unter numerischen Indizes des Ergebnis-Arrays > abgelegt, > als auch unter assoziativen Indizes. Als Schlüssel für die assoziativen > Indizes werden die Feldnamen benutzt." > > "Das optionale zweite Argument Ergebnistyp in mysql_fetch_array() ist eine > Konstante und kann die folgenden Werte annehmen: MYSQL_ASSOC, MYSQL_NUM > und > MYSQL_BOTH. Diese Eigenschaft steht seit PHP 3.0.7 zur Verfügung. > MYSQL_BOTH > ist der Standard für diesen Paramater." > Da MYSQL_BOTH als Standard definiert ist, wird $table_row folglich beide > Schlüsseltypen enthalten und eignet sich daher noch nicht zur direkten > Übernahme. > > Vorschlag von mir: > > $table_array = array(); > > while($table_row = mysql_fetch_array($this->db_result)) > { > /* lass dir zur Kontrolle und damit du ein Gefühl für den > Inhalt des Arrays bekommst dieses mal ausgeben */ > echo '<pre>'; > print_r($table_row); > echo </pre>'; > > $row = array(); // eigenes Array für die endgültige Zeile > foreach($this->mysql_num_fields_array as $field) > { > $row[$field] = $table_row[$field]; // je Zeile ein Array aufbauen > } > $table_array[] = $row; // die Zeile hinten an das $table_array anhängen > } > > Falls du den Parameter MYSQL_ASSOC verwendest könntest du die > $table_row direkt übernehmen, ohne die Fields extra anzufassen. > > > $table_array = array(); > > while($table_row = mysql_fetch_array($this->db_result)) > { > $table_array[] = $table_row; // die Zeile hinten an das $table_array > anhängen > } > >> Wie genau entsteht dieser Fehler?! > > In deinem fehlerhaften Verständnis der kurzen Schreibweise > von $array[] = 'foo'; > >> $table_array[][$field] = $table_row[$field]; > > Schau mal mit print_r in das Array $table_array bei jedem Durchlauf. > Du fügst an dieses Array nicht nur je MySQL-Zeile einen neuen Eintrag > hinten an, sondern auch noch je Spalte. > Als Ergebnis sieht dein Array dann wohl so aus: > $table_row[0]['Vorname'] = 'Max'; > $table_row[1]['Nachname'] = 'Mustermann'; > $table_row[2]['Alter'] = '40'; > $table_row[3]['Anrede'] = 'Herr'; > $table_row[4]['Vorname'] = 'Mario'; > $table_row[5]['Nachname'] = 'Müller'; > $table_row[6]['Alter'] = '30'; > $table_row[7]['Anrede'] = 'Herr'; > > Ich nehme aber an, dass du eher folgendes planst: > $table_row[0]['Vorname'] = 'Max'; > $table_row[0]['Nachname'] = 'Mustermann'; > $table_row[0]['Alter'] = '40'; > $table_row[0]['Anrede'] = 'Herr'; > $table_row[1]['Vorname'] = 'Mario'; > $table_row[1]['Nachname'] = 'Müller'; > $table_row[1]['Alter'] = '30'; > $table_row[1]['Anrede'] = 'Herr'; > > regards, Ringo ihr habt natürl. recht, mir fällt auch grad auf, dass das total doppel gemoppelt war. ich wollte ein while($row=mysql_fetch_array...) in ein fertiges array schreiben, habe dabei über einen umweg erst die feldername ausgelesen und die dann gefüllt. so ein blödsinn aber auch, den ein einfaches: while($table_row = @mysql_fetch_array($this->db_result, MYSQL_ASSOC)) { $table_array[] = $table_row; } hätte ja gereicht;) wer keine arbeit hat, der macht sich welche... das rad neue erfunden sozusagen! der browserabsturz kam anscheinend zustanden weil der virtuelle server merkte, dass die mysql-abfrage zu riesig war. denn bei einem result mit mehr als 1000 einträgen kann das mal leicht passieren;) danke für die mühe!
php::bar PHP Wiki - Listenarchive