Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] array_rand mehrdimensionales array

Einklappen

Neue Werbung 2019

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

  • [Erledigt] array_rand mehrdimensionales array

    Hallo zusammen,

    nachdem ich nun schon meine eigenen grauen Zellen angestrengt habe und nicht mehr weiter weiß, suche ich hier bei euch Rat.

    Wie folgt sieht mein Mehrdimensionaler Array aus:
    PHP-Code:
    echo '<pre>'print_r($textetrue), '</pre>';
    Array
    (
        [
    0] => Array
            (
                [
    0] => Auto1 als Link formatiert
                
    [1] => Auto2 als Link formatiert
                
    .... 
                [
    19] => Auto20 als Link
            

        [
    1] => Array 
            ( 
                [
    0] => Auto1 als purer relativer Link
                
    [1] => Auto2 als purer relativer Link
                
    .... 
                [
    19] => Auto20 als purer relativer Link
           
    )
        [
    2] => Array 
           ( 
               [
    0] => Name und Bezeichnung des Autos1
               
    [1] => Name und Bezeichnung des Autos2
               
    .... 
               [
    19] => Name und Bezeichnung des Autos20
           
    )

    Dieser wird automatisch über ein Pattern mit preg_match_all gefüttert. Was auch bestens funktioniert. Doch nun zu dem Problem. Ich brauch aus dem Array eine variable Anzahl an Werten. z.B. 5 Werte, das ganze habe ich bisher wie folgt gelöst:
    PHP-Code:
    echo "<ul>";
    for (
    $i=0$i<5$i++) {
        
    echo 
    "<li><a href=\"http://www.example.de".$texte[1][$i]."\" target=\"_blank\">".$texte[2][$i]."</a></li>";
    }
    echo 
    "</ul>"
    Bis mir aufgefallen ist das somit ja nur die ersten 5 Werte des Arrays ausgegeben werden. Und somit auch immer die selben 5. Was ich suche ist eine Möglichkeit 5 zufällige Werte aus dem Array auszugeben. Ich suche also 5 Links aus $texte[1] die zu 5 Bezeichnungen aus $texte[2] passen.

    All meine Versuche mittels array_rand sind daran aber bisher gescheitert. Über einen Ansatz oder eine Lösung würde ich mich sehr freuen.

  • #2
    Ich würde das nicht über array_rand lösen, allein deshalb weil array_rand nicht immer einwandfrei funktioniert.

    Mach doch ein mt_rand(0,count($texte)) und danach ein mt_rand(0,count($texte[$ergebnisVomErstenRand]))

    mfg

    PS: hab gerade gesehen das du nur sachen aus $texte[1] holen willst. In dem fall sparste dir das erste mt_rand und machst einfach
    PHP-Code:
    $index mt_rand(0,count($texte[1]));
    $randomNumber $texte[1][$index]; 
    ... das 5x und du hast 5 zufällige werte aus $texte[1]

    Kommentar


    • #3
      Klingt gut hatte werde ich mal testen Aber dann hab ich ja nur die Werte aus $texte[1] benötige aber die passenden Paare aus $texte[2] dazu...leider

      Danke

      Kommentar


      • #4
        Bitte achte ein bisschen auf deine Rechtsschreibung, ist teilweise echt schwierig etwas zu lesen.

        Zitat von The Prophet Beitrag anzeigen
        Klingt gut hatte werde ich mal testen Aber dann hab ich ja nur die Werte aus $texte[1] benötige aber die passenden Paare aus $texte[2] dazu...leider

        Danke
        Das is aber nicht das Problem. Da du nun einen der 5 zufälligen indexe kennst, kannst du das natürlich auch erweitern...

        PHP-Code:
        $index mt_rand0sizeof$texte] ) );

        $text1 $texte][ $index ];
        $text2 $texte][ $index ];
        ... 
        Zudem bevorzuge ich eine andere Arraystruktur:
        PHP-Code:
        $array = array(
          
        => array(
            
        'name' => 'Name und Bezeichnung des Autos1',
            
        'url'  => './link.html',
          ),
          
        => array(
            
        'name' => 'Name 2',
            
        'url'  => './link2.html',
          ),
          ...
        );

        /*
        ** Dann kannst du das nämlich auch anders lösen...
        */
        shuffle$array );

        /*
        ** Deine 5 ausgaben
        */
        echo '<ul>';

        $i 1;
        foreach( 
        $array => $row )
        {
          echo 
        '<li><a href="' $row'url' ] . '">' $row'name' ] . '</a></li>';
          
          if ( 
        $i == )
            break;
          
          ++
        $i;
        }

        echo 
        '</ul>'

        Kommentar


        • #5
          Zitat von BlackWolf Beitrag anzeigen
          allein deshalb weil array_rand nicht immer einwandfrei funktioniert.
          Bitte um Quellenangabe.

          Kommentar


          • #6
            Zitat von David Beitrag anzeigen
            Bitte um Quellenangabe.
            PHP: array_rand - Manual
            unter windows gibt array_rand() keine zufälligen ergebnisse aus. Durfte die Erfahrung selbst machen als ich mir lauter zufällige Einträge in die Datenbank schreiben wollte (um was zu testen) und das sich dann gemütlich nach ein paar Einträgen immer wieder wiederholt hat

            mfg

            Kommentar


            • #7
              Au weia, mit den Zufallsgeneratoren scheint es PHP ja nicht so zu haben

              Kommentar


              • #8
                Zitat von David Beitrag anzeigen
                Au weia, mit den Zufallsgeneratoren scheint es PHP ja nicht so zu haben
                ja, naja, mt_rand() hat bisher ganz gute ergebnisse geliefert und solang man unter unix arbeitet ist es sowieso kein problem

                mfg

                Kommentar


                • #9
                  Hallo zusammen,

                  vielen Dank für deine Anregung tomtaz. Die Arraystruktut gefällt mir gut. Doch leider habe ich keine Idee wie ich zu dieser kommen soll.

                  Mein Pattern ist dieser hier:
                  PHP-Code:
                  $pattern2 '/<h4>\s[^>]*<a\s[^>]*href=\"([^\"]*)\"[^>]*>(.*)<\/a>/siU'
                  dazu kommt dann:
                  PHP-Code:
                  preg_match_all($pattern2$string$texte); 
                  Was dann den bereits oben erwähnten Array ergibt.

                  Kommentar


                  • #10
                    Doch leider habe ich keine Idee wie ich zu dieser kommen soll.
                    mit PREG_SET_ORDER. Der Rest ist Indexsache.

                    Kommentar


                    • #11
                      Danke für den Tipp mit PREG_SET_ORDER. Den Rest habe ich alleine hinbekommen.

                      Grüße

                      Kommentar

                      Lädt...
                      X