Heiner: mysq_fetch_array

Hallo!

Hab ne Frage, was sonst:-)
Ich lese mit der Schleife while($row  =  mysql_fetch_array($result))eine Tabelle aus.
wenn ich zu Testzwecken den array mit print_r($row) ausgebe ergibt sich
ungefähr folgende Ausgabe:

Array([1] => Romanov [Name] => Romanov)

Mit <?php echo key ($row); ?> wird der numerischen Indize (hier 1) ausgeben.

Doch wie komme ich an den assoziativen Indize [Name] ran. Also nicht Romanov sondern der Spaltenname soll ausgegeben werden

Vielen Dank für jede Antwort im voraus

Gruß Heiner

  1. Hi Heiner,

    dazu erst mal ein Link:

    http://www.selfphp.de/funktionsreferenz/mysql_funktionen/mysql_fetch_array.php

    Wenn ich das richtig verstanden habe, müsstest Du mit

    <CUT>
    while($row  =  mysql_fetch_array($result,MYSQL_ASSOC)){
      foreach(array_keys($row) as $key){
        echo $key."\n";
      }
    }
    </CUT>

    die Feldnamen erhalten. Allerdings funktioniert bei mir die foreach-Schleife auch ohne "MYSQL_ASSOC"...

    Gruß
    nd

    1. 你好 nd,

      Andy-nd? ;-)

      Wenn ich das richtig verstanden habe, müsstest Du mit

      [...]

      Nur zur Info: es gibt jetzt Syntax-Highlighting:

        
      while($row  =  mysql_fetch_array($result,MYSQL_ASSOC)){  
        foreach(array_keys($row) as $key){  
          echo $key."\n";  
        }  
      }  
      
      

      Hat halt auch den Vorteil, dass Code auch als solcher ausgezeichnet wird.

      再见,
      克里斯蒂安

      --
      Die Summe zweier gerade Primzahlen ist immer eine Quadratzahl.
      1. Hi Christian,

        vielen Dank für den Tipp - habe ich gar nicht mitbekommen, dass es hier jetzt sowas gibt... Gute Sache das...

        Gruß
        Andy

        PS: 你好 - aber das kann ich nun wirklich nicht entziffern... ;o)

        1. 你好 Andy,

          vielen Dank für den Tipp - habe ich gar nicht mitbekommen, dass es hier
          jetzt sowas gibt... Gute Sache das...

          Ja, hat sich eine Menge getan :)

          PS: 你好 - aber das kann ich nun wirklich nicht entziffern... ;o)

          Hehe, das ist nur meine neue Macke ;-) “Hallo” auf chinesisch.

          再见,
          克里斯蒂安

          --
          <zentrum> wie war noch mal die option in make.conf fuer das benutzen von pipes um das compile zu beschluenigen?
          <CK1> CFLAGS="-pipe"
          <torsten> Oder man frage einen Gentooer seiner Wahl, wie man 2 km Compilerswitches fuer seine CPU hinbekommt ;)
    2. Danke für die schnelle Antwort!

      Ich brauche beide Indizee den numerischen [1] als auch den assoziativen  [Name].

      Mit MYSQL_ASSOC wird nur der numerische Indize ausgegeben.

      1. Moin!

        Ich brauche beide Indizee den numerischen [1] als auch den assoziativen  [Name].

        Wozu? Das sind doch zwei Arrayeinträge mit demselben Inhalt. In der Datenbank kommt das nicht doppelt vor.

        Mit MYSQL_ASSOC wird nur der numerische Indize ausgegeben.

        Nein, da sollte nur der Namensindex ausgegeben werden.

        • Sven Rautenberg
        1. Hello Sven,

          Wozu? Das sind doch zwei Arrayeinträge mit demselben Inhalt. In der Datenbank kommt das nicht doppelt vor.

          Das sind nur zwei gleiche Werte, die aus demselben in der Datenbank erzeugt wurden. Die Arrays [num] und [name] sind aber voneinander unabhängig. Es handelt sich also _leider_ nicht einfach um eine Referenz auf denselben Wert, sondern tatsächlich um zwei Instanzen des gleichen Wertes.

          Ich finde, dass das für einen echten Mehrnutzen bei mysql_fetch_array() geändert werden sollte.

          Harzliche Grüße aus http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
      2. Hi Heiner,

        <?php

        $mysql=mysql_connect("localhost","","");
        mysql_select_db("mysql");
        $result=mysql_query("SELECT * FROM user LIMIT 0,1");
        $row=mysql_fetch_array($result);
        $keys=array_keys($row);
        for($i=1;$i<=sizeof($keys)-1;$i+=2){
          echo "<p>".$keys[$i]."</p>\n";
        }
        mysql_close($mysql);

        ?>

        Damit bekommst Du nur die Namen. Ist zwar umständlich, geht aber - hoffentlich eine Lösung für Dich...

        Gruß
        nd

        @Christian: Naja, das mit dem Syntax-Highlighting ist dann bei nd wohl nicht...

        1. 你好 nd,

          @Christian: Naja, das mit dem Syntax-Highlighting ist dann bei nd wohl
          nicht...

          Wie meinen? Wie gesagt, ueber [ code lang=php]...[ /code] kannst du den
          Code hervorheben. Die Leerzeichen musst du allerdings weglassen, die hab
          ich nur reingemacht, damit das nicht als PHP-Block erkannt wird ;-)

          再见,
          克里斯蒂安

          --
          Q: God, root, what's the difference?
          A: God is merciful.
          1. Hi Christian,

            ah so geht das!! Hab' im FAQ nichts gefunden, daher... Nur als registrierter Benutzer habe ich dann eine Option zum Aktivieren des Syntax-Highlighting gesehen. Danke für den Tipp!

            简体中文版
            nd

            1. 你好 nd,

              ah so geht das!! Hab' im FAQ nichts gefunden, daher...

              Ja... da muss noch jemand ran und die aktualisieren (*hint* Tihim!)

              简体中文版

              Hehe ;-) “Vereinfachte chinesische Ausgabe”

              再见,
              克里斯蒂安

              --
              Microsoft: Where do you want to go today?
              Linux: Where do you want to go tomorrow?
              FreeBSD: Are you guys coming, or what?
  2. Hallo Heiner,

    Array([1] => Romanov [Name] => Romanov)
    Mit <?php echo key ($row); ?> wird der numerischen Indize (hier 1) ausgeben.
    Doch wie komme ich an den assoziativen Indize [Name] ran.

    <zitat quelle="http://de3.php.net/key">
    key() returns the index element of the current array position.
    </zitat>
    key() liefert also immer das den Schlüssel der aktuellen Position im Array - wenn du die anderen Schlüssel auch möchtest, musst du das Array mit z.B. foreach durchlaufen.

    Also nicht Romanov sondern der Spaltenname soll ausgegeben werden

    du könntest natürlich auch gleich mysql_fetch_assoc() verwenden - oder du verwendest DESCRIBE.

    Grüße aus Nürnberg
    Tobias

  3. Hello,

    Doch wie komme ich an den assoziativen Indize [Name] ran. Also nicht Romanov sondern der Spaltenname soll ausgegeben werden

    Das ist der Trick bei "PHP-Arrays". Das sind eigentlich Baumstrukturen, also baumartig  verkettete Listen. Die Arrays, die z.B. durch mysql_fetch_assoc() entstehen, kannst Du daher ganz leicht mit einer Spezialfunktion abfragen:

    if(isarray($_row))
      foreach($_row as $name => $fieldvalue)
      {
        echo "<p><strong>$name:</strong> $fieldvalue</p>\n";
      }

    Probier mal ein bisschen damit herum

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    1. Hi Tom,

      if(isarray($_row))

      Das müsste wohl eher is_array() heißen ;-)

      MfG, Dennis.

      --
      Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:( mo:} zu:|
      Sinnvolles Zitieren: Man zitiert nur Teilsätze des Vorposters auf die man sich bezieht! Nicht einfach alles.
      1. Hello,

        if(isarray($_row))

        Das müsste wohl eher is_array() heißen ;-)

        Jaaa, verda.....

        Aber das hätte der OP doch sicher auch selber gemerkt. Ich war mir zwar sicher, dass ich den Unterstrich getippt hatte, aber da war der Kopf mal wieder schneller, als die Finger.

        Harzliche Grüße aus http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
    2. Hallo Tom!

      Ja, ich glaube das ist die richtige Richtung!

      Danke:-)))))))