Herzlich willkommen im Archiv vom ABAKUS Online Marketing Forum
Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.
denk da mal mehr technisch, nicht bildlich.... ein PC kennt nur 0 und 1, sonst nix.... stell dir das eher als ein riesiges regal vor..... du denkst an "neu durchnummerieren" aber es muss doch nur das aktuelle "Regalfach" ausgegeben werden und das nächste "Regalfach" als neues erstes gemerkt werden..... mal bildlich dargestellt...Daniela hat geschrieben:array_shift nummeriert doch jedes mal neu durch, das kann nicht optimal sein. aber ich probiers trotzdem mal aus.
naja... das setzt die Verwendung von array_shift() vorraus...Caesar hat geschrieben:Wie wäre es eine Schleife laufen zu lassen?
Code: Alles auswählen
for ($i = 1; $i <= 20; $i++) {
$result[] = array_shift($array);
}
Code: Alles auswählen
$result = array_slice($array, 0, 20);
Code: Alles auswählen
<?php
$array = array('foo', 'bar', ...);
function slice($array) {
$result = array_slice($array, 0, 20);
return $result;
}
function splice($array) {
array_splice($array, 20);
return $array;
}
function shift($array) {
$result = array();
for ($i = 1; $i <= 20; $i++) {
$result[] = array_shift($array);
}
return $result;
}
$array1 = $array;
$result1 = shift($array1);
$array2 = $array;
$result2 = splice($array2);
$array3 = $array;
$result3 = slice($array3);
?>
sind doch schon nette Unterschiede.....Southmedia hat geschrieben: array_shift 65ms
array_splice 33ms
array_slice 0,1ms
Im Script wird für mehrere Einträge einer Tabelle etwas gemacht, es gibt also eine Schleife die x mal ausgeführt wird. Jedes mal brauche ich nun 20 zufällige Einträge aus einer anderen Datenbank zur Weiterverarbeitung. Mache ich das jeweils durch ein SELECT ORDER BY RAND() braucht das massiv Zeit und Speicher. Stattdessen führe ich vor der Schleife einmal ein SELECT auf die komplette Tabelle aus und shuffle dann bei jedem Schleifendurchgang eine Kopie des Arrays und nehme die ersten 20 Einträge davon. Viel schneller. Und gar nicht so doof, oder?nur ich frage mich irgendwie wieso man ein array mit mehreren 10.000 Elementen hat, wenn man dann nur 20 braucht.... kann man das nicht anders machen?
Code: Alles auswählen
function forschleife($array) {
$count = count($array);
$count = $count-1;
$result = array();
for ($i = 1; $i <= 20; $i++) {
$zufall = rand(0,$count);
$result[] = $array[$zufall];
}
return $result;
}
Code: Alles auswählen
function whileschleife($array) {
$count = count($array);
$count = $count-1;
$result = array();
$result2=array();
$i=0;
while ($i < 20) {
$zufall = rand(0,$count);
if (!in_array($zufall,$result2)
{
$result[] = $array[$zufall];
$result2[] = $zufall;
$i++;
}
}
return $result;
}
Code: Alles auswählen
function whileschleife($array) {
global $$array;
....
....
$result[] = $$array[$zufall];
....
....
Code: Alles auswählen
$grosses_Array = array('a','b',.........);
$zufall_array= whileschleife('grosses_array');
Stimmt, wenn die Werte definitiv nur einmalig vorkommen dürfen. Das hatte ich vergessen. Danke für die Anmeldung.müssteste dann aber jeweils überprüfen ob du ein Element nicht zufällig 2 mal geholt hast
Code: Alles auswählen
function whileschleife($array) {
$count = count($array);
$count = $count-1;
$result = array();
$result2 = array();
$i=0;
while ($i < 20) {
$zufall = rand(0,$count);
if (!in_array($zufall,$result2)) {
$result[] = $array[$zufall];
$result2[] = $zufall;
$i++;
}
}
return $result;
}