Ankündigung

Einklappen
Keine Ankündigung bisher.

Array zufällig durchsuchen

Einklappen

Neue Werbung 2019

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

  • Array zufällig durchsuchen

    Hallo,
    hab grad ein Problem, wo ich nicht weiß wie ich es richtig angehen soll.

    Also ich ein ein großes (biszu 1000 Einträge auf erster Ebene + jeweils 4 auf der zweiten) Array, aus dem ich zufällig Werte selektieren möchte auf die eine bestimmte Bedingung zutrifft.
    Nun da die Keys nicht verändert werden dürfen fällt shuffle schonmal raus.
    Die Bedingung ist dass bei dem zufälligen Eintrag ein wert größer wie 0 sein muss. (d.h. $array[1]['wert'] > 0).
    Nun muss ich dieses Array eben zufällig durchlaufen, und prüfen ob ein Eintrag auf die Bedingung zutrifft.
    Wichtig ist dass er auf jeden Fall einen Eintrag findet, falls ein solcher existiert.

    Da dieses ganze Prozedere viele male stattfindet, aber die Werte sich nach jedem Durchlauf ändern sollte das ganz halbwegs performant sein.

    Nun mit foreach komm ich ja nicht weit, weil der ja nicht zufällig auswählt...

    Ich hoffe Ihr hab einen Ansatz wie man das vernünftig lösen kann...

    Grüße
    Signatur:
    PHP-Code:
    $s '0048656c6c6f20576f726c64';
    while(
    $i=substr($s=substr($s,2),0,2))echo"&#x00$i;"

  • #2
    Mein Vorschlag: Array erst einmal normal durchlaufen, dabei die Keys, bei denen die größer-Null-Bedingung erfüllt ist, als Einträge in ein neues Array schreiben.
    Neues Array shufflen - und dann mit den daraus zufällig ermittelten Werten wiederum als Schlüssel auf's Ursprungsarray zugreifen.
    [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

    Kommentar


    • #3
      wie wäre es mit:

      PHP-Code:
      $found = array();
      foreach(
      $array as $ar) {
      $key array_rand($array);
      $zf $array[$key];
      if(
      $zf != 0) {
      $found[$key] = $zf;
      }
      if(
      count($found) >= 4) break;

      "Dummheit redet viel..Klugheit denkt und schweigt.." [Amgervinus]

      Kommentar


      • #4
        @ChrisB: Wenn ich mal annehme, dass ich die Prozedur 100 mal machen müsste, wäre dass dann von der Performance noch vertretbar, weil das wäre ja schon einiges zu rechnen...

        @Destruction: Warum foreach ? Wenn ich das richtig sehe ist es nicht gewährleistet, dass er auf jedenfall einen Eintrag findet, solange einer existiert...

        Grüße
        Signatur:
        PHP-Code:
        $s '0048656c6c6f20576f726c64';
        while(
        $i=substr($s=substr($s,2),0,2))echo"&#x00$i;"

        Kommentar


        • #5
          Dann bau halt erst mal ein array mit nur denen wo es nicht 0 ist:

          PHP: array_keys - Manual

          ( siehe 2. Parameter ).

          Bissl Eigeninitiative
          cu
          Grüße
          Destruction
          "Dummheit redet viel..Klugheit denkt und schweigt.." [Amgervinus]

          Kommentar


          • #6
            Zitat von ByStones Beitrag anzeigen
            Wenn ich mal annehme, dass ich die Prozedur 100 mal machen müsste, wäre dass dann von der Performance noch vertretbar, weil das wäre ja schon einiges zu rechnen...
            Welche Prozedur? 100 mal mit den gleichen Daten? Dann speichere das Zwischen-Array auch irgendwo wirklich zwischen, ggf. über den einzelnen Request hinausgehend.

            Wenn mit immer verschiedenen Daten, dann - was hast du vor ...?
            [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

            Kommentar

            Lädt...
            X