Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

PHP: Teil eines Arrays löschen

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Anonymous

Beitrag von Anonymous » 25.08.2006, 22:13

versuch das mal, könnte aber sein, dass es nicht funktioniert.... habs noch nie ausprobiert:

Code: Alles auswählen

function whileschleife($array) {
    global $$array;
    $count = count($$array);
    $count = $count-1;

    $result = array();
    $result2 = array();
    $i=0;
    while &#40;$i < 20&#41; &#123;
       
        $zufall = mt_rand&#40;0,$count&#41;;
        if &#40;!in_array&#40;$zufall,$result2&#41;&#41; &#123;
             $result&#91;&#93; = $$array&#91;$zufall&#93;;
             $result2&#91;&#93; = $zufall;
             $i++;
        &#125;
    &#125;
    return $result;
&#125;
zum aufrufen dann einfach den Namen des Arrays übergeben, also angenommen unser Großes Array ist in der Var $grosses_array abgelegt, dann so die Funktion aufrufen:

Code: Alles auswählen

$zufall_array= whileschleife&#40;'grosses_array'&#41;;
so ist die global variable Variable aber dann auch eine Referenz auf das originalarray, habs gerade mal nachgechlagen... global legt eine Referenz an...

und so wäre es mit direkten Aufruf über eine Referenz:

Code: Alles auswählen

function whileschleife&#40;&$array&#41; &#123;
    $count = count&#40;$array&#41;;
    $count = $count-1;

    $result = array&#40;&#41;;
    $result2 = array&#40;&#41;;
    $i=0;
    while &#40;$i < 20&#41; &#123;
       
        $zufall = mt_rand&#40;0,$count&#41;;
        if &#40;!in_array&#40;$zufall,$result2&#41;&#41; &#123;
             $result&#91;&#93; = $array&#91;$zufall&#93;;
             $result2&#91;&#93; = $zufall;
             $i++;
        &#125;
    &#125;
    return $result;
&#125;
also nur ein zusätzliches & vor der Var in der Funktionsdeklaration...

ich vermute mal, dass diese beiden versionen ähnlich schnell sind, da sie ja beide im grunde über eine Referenz arbeiten, wobei der direkte Aufruf über die Referenz wahrscheinlich als eleganter angesehen werden kann.....

Man muss bei diesen ganzen Lösungen über for und whileschleife aber auch noch bedenken, dass es nur funktioniert, wenn ein nummerischer key vorhanden ist, der bei 0 beginnt und fortlaufend ist, d.h. keine Wertepaare (key, value) zwischendurch fehlen..... wenn ein alphanummerischer key verwendet wird wird die Sache ein wenig komplexer.... man könnte dann ggf. mit array_keys() ein Hilfsarray mit allen keys anlegen und dort dann per Zufall die keys auswählen und dann hierfür die Werte im originalarray auslesen:

Code: Alles auswählen

function whileschleife&#40;&$array&#41; &#123;
    $hilfsarray=array_keys&#40;$array&#41;;
    $count = count&#40;$hilfsarray&#41;;
    $count = $count-1;
    $result = array&#40;&#41;;
    $result2 = array&#40;&#41;;
    $i=0;
    while &#40;$i < 20&#41; &#123;
       
        $zufall = mt_rand&#40;0,$count&#41;;
        if &#40;!in_array&#40;$zufall,$result2&#41;&#41; &#123;
             $key=$hilfsarray&#91;$zufall&#93;;
             $result&#91;&#93; = $array&#91;$key&#93;;
             $result2&#91;&#93; = $zufall;
             $i++;
        &#125;
    &#125;
    return $result;
&#125;
ich habe rand() übrigends auch noch mit mt_rand() ausgetauscht, da dies schneller ist und bessere Zufallszahlen liefert, muss dann vorher einmal über mt_srand() initialisiert werden.....