Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Array füllen ohne doppelte Zahlen

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Array füllen ohne doppelte Zahlen

    Hallo zusammen,
    wiedermal etwas wo ich denke, ist PHP eine Lebensform und hat sie (ist PHP weiblich?) den Willen mich zu ärgern.

    Folgede Aufgabenstellung.

    Ich möchte aus einet Tabelle verschiedene Datensätze haben, sagen wir 5 Stück. Dazu dachte ich mir ich bastel etwas was mir aus meinen Datensätzen per Zufall 5 Einträge auswählt.
    Soweit so gut, das funktioniert.

    Jedoch kommte es vor, das mal zwei gleiche Datensätze angezeigt werden.
    Naja wenn ich mal irgendwann über 10.000 Datensätze habe und ich lasse mir davon 5 per Zufall anzeigen ist die Gefahr gering das doppelte Datensätze angezeigt werden, aber im Moment sind nur 7 Datensätze drin und da kommt es öfters vor.

    Also habe ich was erstellt, wovon ich dachte es funktioniert.
    Jedoch erscheinen immernoch doppelte Datensätze.

    Vieleicht seh ich den Fehler nicht, deshalb mal den Code.
    Gruß
    PHP-Code:
    $index //hier steht eine function die die max. Datensätze aus der Tabelle der DB holt

    $zahlen = array();
    for( 
    $i=0$i 5$i++ )
     {
      
    $temp mt_rand(1,$index);
      if( 
    in_array($temp$zahlen))
       {
        
    $i--;
        continue;
       }
     
    $zahlen $temp;

    Egal was du getan hast, egal wie du gelebt hast, egal wer du gewesen bist......am Ende der Welt interesiert es niemanden !

  • #2
    PHP-Code:
    $index getFromDbAsArray();

    $zahlen = array();
    foreach (
    $index as $e){
    if (!
    in_array($e,$zahlen,true) {
    $zahlen[] = $e;
    }
    }

    //5 Zufällige raussuchen ... 
    So in etwa stellst du dir das vor ?

    Oder du baust alles in deine DB-Abfrage ein (eventuell kannst auch GROUP BY benutztn):
    Code:
    SELECT DISTINCT spalten FROM tabelle ORDER BY RAND() LIMIT 5
    Code:
    SELECT spalten FROM tabelle GROUP BY spalte ORDER BY RAND() LIMIT 5
    Signatur:
    PHP-Code:
    $s '0048656c6c6f20576f726c64';
    while(
    $i=substr($s=substr($s,2),0,2))echo"&#x00$i;"

    Kommentar


    • #3
      Mach es gleich in der Datenbankabfrage!

      Kommentar


      • #4
        wenn ich ...
        Code:
        SELECT DISTINCT spalten FROM tabelle ORDER BY RAND() LIMIT 5
        in einer function verwende, wie kann ich dann über den Rückgabewert die Angaben der Einzelnen Datensätze ausgeben?

        PHP-Code:
        function datensaetze()
        {
        $ergebnis = array();
        $query mysql_query("SELECT DISTINCT spalten FROM tabelle ORDER BY RAND() LIMIT 5");
        while (
        $ergebnis = @mysql_fetch_array($query))
            {
                return 
        $ergebnis;
            }
            return 
        false;

        dannn mit zb.
        PHP-Code:
        $daten datensaetze();
        echo 
        $daten['id'];
        echo 
        $daten['name']; 
        ???

        PHP-Code:
        $index getFromDbAsArray();

        $zahlen = array();
        foreach (
        $index as $e){
        if (!
        in_array($e,$zahlen,true) {
        $zahlen[] = $e;
        }
        }

        //5 Zufällige raussuchen ... 
        Bei dem Code steh ich etwas auf dem schlauch, kannst du es etwas näher erläutern?
        Ist Index die Anzahl der Durchläufe oder die Anzahl der Datensätze in der Tabelle?
        Egal was du getan hast, egal wie du gelebt hast, egal wer du gewesen bist......am Ende der Welt interesiert es niemanden !

        Kommentar


        • #5
          Lass die suche nach zufälligen Werten per DB machen nicht per PHP!

          Und wenn du in einer Funktion return verwendest wird genau dort die Funktion abgebrochen und der Wert zurückgegeben, du solltest also lieber alle Werte in ein Array speichern und dann das Array am Ende zurückgeben.

          Kommentar


          • #6
            Zitat von EmmKey Beitrag anzeigen
            wenn ich [...] in einer function verwende, wie kann ich dann über den Rückgabewert die Angaben der Einzelnen Datensätze ausgeben?
            Da du weißt, dass eine Funktion nur einen Rückgabewert haben kann, sollte dir auch klar sein, dass du dann eine Datenstruktur verwenden musst, die sich „als ein Wert“ zurückgeben lässt - also bspw. ein Array.
            [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

            Kommentar


            • #7
              Lass die suche nach zufälligen Werten per DB machen nicht per PHP!
              Naja, kann ja sein, dass noch berechnungen durchgeführt werden müssen, z.B. wenn der Zufall gewichtet ist, dann wüsste ich nicht wie man dass in eine Abfrage einbauen kann...
              Signatur:
              PHP-Code:
              $s '0048656c6c6f20576f726c64';
              while(
              $i=substr($s=substr($s,2),0,2))echo"&#x00$i;"

              Kommentar


              • #8
                Naja das sieht mir nicht wirklich danach aus

                Kommentar


                • #9
                  Nein keine weiteren Bedingungen.

                  einfach nur 5 zufällige, nicht gleiche Datensätze aus einer Tabelle.

                  ok spiel ich das mal durch dann könnte es so aussehen? Wäre das richtig
                  Die Function....
                  PHP-Code:
                  function datensaetze() 

                  $ergebnis = array(); 
                  $query mysql_query("SELECT DISTINCT spalten FROM tabelle ORDER BY RAND() LIMIT 5"); 
                  while (
                  $ergebnis = @mysql_fetch_array($query)) 
                      { 
                          return 
                  $ergebnis
                      } 
                      return 
                  false

                  wie kann ich dann im Script auf die einzelnen Datensätze zugreifen um sie darzustellen?? so...???
                  PHP-Code:
                  $daten datensaetze();

                  //ersten datensatz anzeigen 
                  echo $daten[0]['id']; 
                  echo 
                  $daten[0]['name'];
                  echo 
                  "____________";
                  //zweiten datensatz anzeigen 
                  echo $daten[1]['id']; 
                  echo 
                  $daten[1]['name'];
                  echo 
                  "____________";
                  //usw 
                  Egal was du getan hast, egal wie du gelebt hast, egal wer du gewesen bist......am Ende der Welt interesiert es niemanden !

                  Kommentar


                  • #10
                    Zitat von EmmKey Beitrag anzeigen
                    ok spiel ich das mal durch dann könnte es so aussehen? Wäre das richtig
                    Die Function....
                    Nein, die Funktion wird immer noch durch die Rückgabe des allerersten Datensatzes verlassen.

                    Bitte lies die Antworten auch, die du hier bekommst - sowohl Flor1an als auch ich haben dich bereits darauf hingewiesen, dass ein Array, in dem du alle Datensätze sammelst, ein geeigneter Rückgabewert für eine solche Funktion wäre.
                    [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

                    Kommentar


                    • #11
                      Deine Funktion datensaetze liefert immer noch nur einen Datensatz!!! Du willst aber mehrere Datensätze, ale baue ein Array mit diesen!

                      Kommentar


                      • #12
                        Zitat von EmmKey Beitrag anzeigen
                        PHP-Code:
                        while ($ergebnis = @mysql_fetch_array($query)) 
                            { 
                                return 
                        $ergebnis
                            } 
                            return 
                        false

                        Nicht dein Ernst oder? Wie "return" funktioniert wurde dir doch mittlerweile sehr anschaulich erklärt.
                        [IMG]https://g.twimg.com/twitter-bird-16x16.png[/IMG][URL="https://twitter.com/fschmengler"]@fschmengler[/URL] - [IMG]https://i.stack.imgur.com/qh235.png[/IMG][URL="https://stackoverflow.com/users/664108/fschmengler"]@fschmengler[/URL] - [IMG]http://i.imgur.com/ZEqflLv.png[/IMG] [URL="https://github.com/schmengler/"]@schmengler[/URL]
                        [URL="http://www.schmengler-se.de/"]PHP Blog[/URL] - [URL="http://www.schmengler-se.de/magento-entwicklung/"]Magento Entwicklung[/URL] - [URL="http://www.css3d.net/"]CSS Ribbon Generator[/URL]

                        Kommentar


                        • #13
                          Ich versteh es nicht, sorry! ist denn bei der function nicht.....
                          PHP-Code:
                          function datensaetze()  
                          {  
                          $ergebnis = array();//ARRAY!!!!  
                          $query mysql_query("SELECT DISTINCT spalten FROM tabelle ORDER BY RAND() LIMIT 5"); 
                          durch "$ergebnis = array();" ein array deklariert und wird doch dann auch zurückgegeben, oder ?
                          Egal was du getan hast, egal wie du gelebt hast, egal wer du gewesen bist......am Ende der Welt interesiert es niemanden !

                          Kommentar


                          • #14
                            return $ergebnis;
                            Was macht diese Zeile und wo steht sie??? Wie oft noch???

                            Kommentar


                            • #15
                              Soory Leute !!!!
                              Der 1 € fällt in Centstücken.

                              Ihr habt ja recht !
                              Ich bekomme ja nur ein Array mit den Zahlen der zb. Indexes wieder und nicht den ganzen Datensatz.
                              Egal was du getan hast, egal wie du gelebt hast, egal wer du gewesen bist......am Ende der Welt interesiert es niemanden !

                              Kommentar

                              Lädt...
                              X