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.....

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Southmedia
PostRank 10
PostRank 10
Beiträge: 7322
Registriert: 20.07.2003, 19:56

Beitrag von Southmedia » 26.08.2006, 00:07

Nur schnell, Manual zu mt_rand:
Anmerkung: Seit PHP 4.2.0 ist es nicht mehr nötig, den Zufallszahlengenerator zu initialisieren, bevor man ihn benutzt.
Rest schau ich mir später mal an.

Southmedia
PostRank 10
PostRank 10
Beiträge: 7322
Registriert: 20.07.2003, 19:56

Beitrag von Southmedia » 26.08.2006, 02:40

ich habe rand() übrigends auch noch mit mt_rand() ausgetauscht, da dies schneller ist und bessere Zufallszahlen liefert,
Das hab ich mir gerade mal versucht nachzuvollziehen: Bei 100, 1000, 10000 und 100.000 Durchgängen wechseln die beiden Funktionen sich quasi bei jedem erneuten Aufruf der Testdatei mit den Laufzeiten ab. Mal ist mt_rand(), mal rand() schneller. Seltsam.

Anonymous

Beitrag von Anonymous » 26.08.2006, 03:28

Southmedia hat geschrieben:
ich habe rand() übrigends auch noch mit mt_rand() ausgetauscht, da dies schneller ist und bessere Zufallszahlen liefert,
Das hab ich mir gerade mal versucht nachzuvollziehen: Bei 100, 1000, 10000 und 100.000 Durchgängen wechseln die beiden Funktionen sich quasi bei jedem erneuten Aufruf der Testdatei mit den Laufzeiten ab. Mal ist mt_rand(), mal rand() schneller. Seltsam.
die geschwindigkeit von rand() ist stark Systemabhängig, da hier ein Zufallsgenerator vom System verwendet wird, während mt_rand() einen eigenen Zufallsgenerator mitbringt.

Gut, ab PHP 4.2.0 ist das vorherige initialisieren nicht mehr nötig, aber bei scripten die von den verwendeten Funktionen her auch auf PHP < 4.2.0 laufen würden, sollte man es immer benutzen... schadet ja nicht.... klar, wenn man reine PHP5 Funktionen nutzt ist es unnötig, diese scripte würden ja nicht mal auf PHP 4.2.0 laufen

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag