array_unique()

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • array_unique()

    Hallo Forum,

    die Funktion array_unique() gibt mir gerade ein Rätsel auf.
    Ich rufe aus meiner (MySQL)Datenbank PLZ-Felder ab.
    Aus der Abfrage übergebe ich die ersten zwei Ziffern an ein Array:

    PHP-Code:
    $finder_plz mysql_query ("SELECT plz FROM agenturen ORDER BY plz");

    $plz = array();

    while(
    $zeile mysql_fetch_array($finder_plz)) {

    if(
    $zeile["plz"] != "") { $plz[] = substr($zeile["plz"],0,2); }} 
    Wenn ich das ausgebe mit:

    PHP-Code:
    for($p=0$p count($plz); $p++) {

    echo 
    $plz[$p]."<br />"; } 
    ... funktioniert das wie gewünscht, die Ausgabe:

    10
    10
    12
    22
    22
    50

    Jetzt möchte ich jedoch doppelte Array-Einträge entfernen und füge unmittelbar vor die for-Schleife ein:

    PHP-Code:
    $plz array_unique($plz); 
    Und nun kann ich die Ausgabe nicht mehr nachvollziehen:

    10

    12
    22

    Die 50 wird gelöscht (?), zudem eine Leerzeile eingefügt.

    Weiß jemand, wie so etwas zustande kommt?

    Vielen Dank
    Fabian Klein

  • #2
    warum nicht SELECT DISTINCT?

    Kommentar


    • #3
      Hallo, danke für die Antwort.

      Also aus meiner Sicht (kann mich aber täuschen) sollte es unerheblich sein, ob ich DISTINCT mache oder nicht. Die PLZ-Zahlen sind 5-stellig in der DB.

      Das beste wäre natürlich, wenn ich so etwas (in der Art) machen könnte, habe aber nichts gefunden:

      SELECT DISTINCT LEFT(plz,2) FROM...

      Danke & Gruß
      Fabian

      Kommentar


      • #4
        Original geschrieben von fab_k
        Das beste wäre natürlich, wenn ich so etwas (in der Art) machen könnte, habe aber nichts gefunden:

        SELECT DISTINCT LEFT(plz,2) FROM...
        Hast du das vielleicht auch mal einfach ausprobiert?...

        Ansonsten kann man auch GROUP BY verwenden

        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
        Wie man Fragen richtig stellt

        Kommentar


        • #5
          @Fab
          Den Leerstring hast du selber eingefügt. Ein error_reporting(E_ALL) hätte dich darauf aufmerksam gemacht, dass du auf nicht exisiterende Array Elemente zugreifen willst.
          Und die 50 wird imho nicht gelöscht, sondern die for Schleife ist nicht geeignet für ein solches Array. Hast du es mal mit foreach() probiert ? Resp wäre es in einem solchen Falle besser ein var_dump() zum prüfen zu verwenden.

          Gruss

          tobi
          Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

          [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
          Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

          Kommentar


          • #6
            Hallo,

            @ghostgambler:

            Danke Dir, das habe ich ausprobiert, da hatte ich aber nichts von der DB erhalten...

            @jahlives:

            Unglaublich... mit foreach klappt es...:

            PHP-Code:
            $finder_plz mysql_query ("SELECT plz FROM agenturen ORDER BY plz");

            $plz = array();

            while(
            $zeile mysql_fetch_array($finder_plz)) {

            if(
            $zeile["plz"] != "") { $plz[] = substr($zeile["plz"],0,2); }}

            $plz array_unique($plz);

            foreach (
            $plz as $plz_neu) {

            echo 
            $plz_neu."<br />"; } 
            Finde das erstaunlich, weil PHP ja sonst so "tolerant" ist...

            Vielen Dank!

            Gruß
            Fabian

            Kommentar


            • #7
              Finde das erstaunlich, weil PHP ja sonst so "tolerant" ist...
              PHP ist auch tolerant und gerade deswegen wird der Code ausgeführt. Eine "richtige" Programmiersprache hätte dich nicht einmal kompilieren lassen. Hast du dir mal die Keys des Arrays nach array_unique() angeschaut ? Für mich sprechen diese Keys gerade für die Toleranz von PHP
              Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

              [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
              Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

              Kommentar


              • #8
                Es macht trotzdem keinen Sinn etwas in php zu machen, was die DB genauso gut kann...
                Probier halt ein wenig mit der Syntax rum - mMn funktioniert es sowohl mit DISTINCT, wie auch mit GROUP BY

                Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                Wie man Fragen richtig stellt

                Kommentar


                • #9
                  Hallo ghostgambler,

                  Du hast Recht!

                  Ich hatte eine Weile nach der passenden Query gesucht und irgendwie nichts gefunden

                  Dann dachte ich, dass es eine solche Abfrage gar nicht gäbe und habe mich dem PHP zugewandt.

                  Habe noch etwas probiert, wie Du vorgeschlagen hast, jedoch kenne ich nicht so gut die Möglichkeiten von SQL.

                  Werde aber jeden Tipp diesbezüglich umsetzen...

                  Vielen Dank
                  Fabian

                  Kommentar


                  • #10
                    zeig mal deinen versuch mit select distinct left..

                    Kommentar

                    Lädt...
                    X