phpbar.de logo

Mailinglisten-Archive

[php] Skript hängt sich auf beim Array füllen[]

[php] Skript hängt sich auf beim Array füllen[]

Ringo Großer swek at gmx.net
Fre Jan 5 18:11:50 CET 2007


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



php::bar PHP Wiki   -   Listenarchive