Steffen: genau 3 einträge zufällig aus array ermitteln

hallo,
ich möchte genau 3 einträge aus einem array zufällig ermitteln, wobei jeder nur einmal vorkommen darf.

array_rand() liefert mir immer zwischen 0 und 3 werten, was nicht meinen vorstellungen entspricht.

wie lässt sich das realisieren?

mfg,
 steffen

  1. hi!
    versuchs mal mit htaccess!
    Werner

    1. hi!
      versuchs mal mit htaccess!
      Werner

      hä - ich denke, dass sich das posting nicht auf mein posting bezieht...

      andernfalls würde ich es mit einem kugelschreiber oder doch ehr mit einem telefon versuchen ;-))

      1. kann es sein dass du mich nur nicht verstanden hast?

        1. kann es sein dass du mich nur nicht verstanden hast?

          kann es sein, dass du mich nicht verstanden hast...

          ich habe ein php-script.

          darin wiederum ein Array $ids mit den einer variablen anzahl von key/value-paaren.
          davon möchte ich die values von genau 3 keys ausgeben.

          was ich da mit .htaccess (in der ich zB die Konfiguration von Apache oder PHP beeinflussen kann) machen soll, versteh ich leider absolut überhaupt nicht. das ist meiner meinung nach (wobei ich mir auch wirklich todsicher bin) ein reines programmier-problem innerhalb des php-scriptes.
          ich hoffe, dass du mich jetzt richtig verstanden hast...

          1. natürlich! mach einfach einen passwortschutz, mit dem du den ordner wo das php-script liegt per htaccess schützt!

            1. natürlich! mach einfach einen passwortschutz, mit dem du den ordner wo das php-script liegt per htaccess schützt!

              Sorry, aber deine Lösung geht am Problem vorbei.

              Solltest du allerdings ein gewaltiges Maß an Ironie gefrühstückt haben, dann sei dir gesagt: Die Ironie ist nicht angekommen. Es hat möglicherweise für die Welt (er)lösende Wirkung, wenn sie an das fragliche Script nicht mehr herankommt, aber nicht für Steffen.

              - Sven Rautenberg

              1. natürlich! mach einfach einen passwortschutz, mit dem du den ordner wo das php-script liegt per htaccess schützt!

                Sorry, aber deine Lösung geht am Problem vorbei.

                Solltest du allerdings ein gewaltiges Maß an Ironie gefrühstückt haben, dann sei dir gesagt: Die Ironie ist nicht angekommen. Es hat möglicherweise für die Welt (er)lösende Wirkung, wenn sie an das fragliche Script nicht mehr herankommt, aber nicht für Steffen.

                • Sven Rautenberg

                also das ist glaub ich schon n bischen zu viel ironie..

                ne problemlösung wäre mir ehrlich gesagt lieber ;-)
                werd noch mal ins manual sehn, hab da aber bis jetzt noch nichts gefunden...

  2. Aloha!

    array_rand() liefert mir immer zwischen 0 und 3 werten, was nicht meinen vorstellungen entspricht.

    Das entspricht auch nicht der Beschreibung der Funktionsweise von array_rand().

    Schau dir die Kommentare zu array_rand() auf http://www.php.net/manual/en/function.array-rand.php an. Damit (indbesondere mit den Alternativfunktionen) solltest du es hinkriegen.

    - Sven Rautenberg

  3. hallo, steffen,

    ich möchte genau 3 einträge aus einem array zufällig ermitteln, wobei jeder nur einmal vorkommen darf.

    array_rand() liefert mir immer zwischen 0 und 3 werten, was nicht meinen vorstellungen entspricht.

    wie lässt sich das realisieren?

    ich poste Dir mal ein Skript, mit dem ich mal drei verschiedene Zufallsbilder, die nie doppelt angezeigt werden durften, mit title-Text auf einer Seite dargestellt habe. Du kannst Dir das ja entsprechend anpassen.

    Viel Spaß, Grüße,

    Sebastian

    <?php
    /* *********************************************************************
    Filename: randompics.inc
    Description: generate random pics
    Author:  © 2002 Sebastian Becker (sebastian.becker@berlin.de)
    ********************************************************************** */

    // configuration
    $rp_default_txt = "Berliner Impressionen"; // default description text
    $rp_default_w = "150"; // default width
    $rp_default_h = "150"; // default height
    $rp_pic_num = 3; // number of images to show

    // set image path
    if($page=="guestbook"){$rp_pic_path="../img/";}else{$rp_pic_path="img/";}

    // spacer image
    $rp_spacer = "<img src="".$rp_pic_path."onepixel.gif" width="".$rp_default_w."" height="1" alt="">";

    // picture parameters
    $rp_pic[0] = 'pic01.jpg';
    $rp_pic_w[0] = '';
    $rp_pic_h[0] = '';
    $rp_pic_txt[0] = 'Brandenburger Tor';

    $rp_pic[1] = 'pic02.jpg';
    $rp_pic_w[1] = '';
    $rp_pic_h[1] = '';
    $rp_pic_txt[1] = 'Potsdamer Platz';

    $rp_pic[2] = 'pic03.jpg';
    $rp_pic_w[2] = '';
    $rp_pic_h[2] = '';
    $rp_pic_txt[2] = 'Brandenburger Tor';

    $rp_pic[3] = 'pic04.jpg';
    $rp_pic_w[3] = '';
    $rp_pic_h[3] = '';
    $rp_pic_txt[3] = 'Bundeskanzleramt';

    $rp_pic[4] = 'pic05.jpg';
    $rp_pic_w[4] = '';
    $rp_pic_h[4] = '';
    $rp_pic_txt[4] = 'Lichtsäulen am Potsdamer Platz';

    $rp_pic[5] = 'pic06.jpg';
    $rp_pic_w[5] = '';
    $rp_pic_h[5] = '';
    $rp_pic_txt[5] = 'Sony Potsdamer Platz (Detail)';

    $rp_pic[6] = 'pic07.jpg';
    $rp_pic_w[6] = '';
    $rp_pic_h[6] = '';
    $rp_pic_txt[6] = 'Skulptur am Checkpoint Charlie';

    $rp_pic[7] = 'pic08.jpg';
    $rp_pic_w[7] = '';
    $rp_pic_h[7] = '';
    $rp_pic_txt[7] = 'Hamburger Bahnhof';

    $rp_pic[8] = 'pic09.jpg';
    $rp_pic_w[8] = '';
    $rp_pic_h[8] = '';
    $rp_pic_txt[8] = 'Funkturm';

    $rp_pic[9] = 'pic10.jpg';
    $rp_pic_w[9] = '';
    $rp_pic_h[9] = '';
    $rp_pic_txt[9] = 'Brandenburger Tor & Reichstag';

    $rp_pic[10] = 'pic11.jpg';
    $rp_pic_w[10] = '';
    $rp_pic_h[10] = '';
    $rp_pic_txt[10] = 'Fernsehturm';

    $rp_pic[11] = 'pic12.jpg';
    $rp_pic_w[11] = '';
    $rp_pic_h[11] = '';
    $rp_pic_txt[11] = 'Kurfürstendamm';

    $rp_pic[12] = 'pic13.jpg';
    $rp_pic_w[12] = '';
    $rp_pic_h[12] = '';
    $rp_pic_txt[12] = 'Gedächtniskirche';

    $rp_pic[13] = 'pic14.jpg';
    $rp_pic_w[13] = '';
    $rp_pic_h[13] = '';
    $rp_pic_txt[13] = 'Hackesche Höfe';

    $rp_pic[14] = 'pic15.jpg';
    $rp_pic_w[14] = '';
    $rp_pic_h[14] = '';
    $rp_pic_txt[14] = 'Hochhäuser am Potsdamer Platz';

    $rp_pic[15] = 'pic16.jpg';
    $rp_pic_w[15] = '';
    $rp_pic_h[15] = '';
    $rp_pic_txt[15] = 'Schloss Charlottenburg';

    $rp_pic[16] = 'pic17.jpg';
    $rp_pic_w[16] = '';
    $rp_pic_h[16] = '';
    $rp_pic_txt[16] = 'Goldelse auf der Siegessäule';

    $rp_pic[17] = 'pic18.jpg';
    $rp_pic_w[17] = '';
    $rp_pic_h[17] = '';
    $rp_pic_txt[17] = 'Sony Potsdamer Platz (Dach)';

    $rp_pic[18] = 'pic19.jpg';
    $rp_pic_w[18] = '';
    $rp_pic_h[18] = '';
    $rp_pic_txt[18] = 'Synagoge an der Oranienburger Straße';

    // Zahl der Bilder feststellen
    $rp_picCount = $rp_pic.length;

    // ---------- nothing to change from here ----------

    function generateNumbers($min, $max, $anz)
    {
    $array = range($min, $max);
    srand ((double)microtime()*1000000);
    for($x=0;$x<$anz;$x++)
    {
    $i = rand(1, count($array))-1;
    $erg[] = $array[$i];
    array_splice($array, $i, 1);
    }
    return $erg;
    }

    // generate 3 different numbers
    $rp_ran_array = generateNumbers(0, count($rp_pic)-1, $rp_pic_num);

    $rp_str = "";

    for($j=0;$j<$rp_pic_num;$j++)
    {
    $rp_ran = $rp_ran_array[$j];
    $rp_p = $rp_pic_path.$rp_pic[$rp_ran];
    $rp_p_w = $rp_pic_w[$rp_ran];
    $rp_p_h = $rp_pic_h[$rp_ran];
    $rp_p_txt = $rp_pic_txt[$rp_ran];

    // use default values if no values are set
    if($rp_p_txt=="")$rp_p_txt=$rp_default_txt; if($rp_p_w=="")$rp_p_w=$rp_default_w; if($rp_p_h=="")$rp_p_h=$rp_default_h;

    // build HTML string
    $rp_str .= $rp_spacer;
    $rp_str .= "<img src="".$rp_p."" width="".$rp_p_w."" height="".$rp_p_h."" border="0" alt="".$rp_p_txt."" title="".$rp_p_txt."" onMouseOver="window.status=this.alt;return true;" onMouseOut="window.status='';return true;">";
    }

    // print HTML
    echo($rp_str);

    // print picture description
    function picText($rp_pic)
    {
    global $rp_ran;
    global $rp_alt_txt;
    $rp_ran = $rp_ran[$rp_pic-1];
    echo($rp_alt_txt[$rp_ran]);
    }

    ?>