Mailinglisten-Archive |
#welches ist der eleganteste Workaround für die in #PHP 3 noch nicht vorhandene Funktion in_array()? # #a) Schleife mit for ($i = 0; $i < count($xyz); $i++) # echo $xyz[$i]; # (bei assz. Arrays schwierig) mmmh entweder mit Schlüssel oder Wert geht gleich gut (s.u.) #b) evtl. mit array_walk($xyz, "eigene_Funktion") (animiert mich zu nichts ?) Hallo Andreas, für kleinere Arrays mag es noch sequentiell (mit for() ) gehen, dann aber bitte ein 'break' in der Schleife, wenn gefunden :-)) Bei mittleren Datenmengen sollte man vorher sortieren und durch Vergleiche den Suchbereich im Array immer weiter halbieren bis der Suchbegriff gefunden wurde oder bis die Suchmenge nur noch ein Element groß ist und nicht der Suchbegriff ist. Ohne große Überprüfung des Codes sieht das in etwa so aus: <? function myin_array($such,$r,$pu,$p,$po) { echo "$such $r $pu $p $po<br>"; if($such==$r[$p]) return "ja $such = $p"; else { if($pu==$p || $p==$po) return 'nein'; if($such > $r[$p]) return myin_array($such,$r,$p,$p+floor(($po-$p)/2),$po); elseif($such < $r[$p]) return myin_array($such,$r,$pu,$pu+floor(($p-$pu)/2),$p); } } $r=array('b','d','x','a','c','t','z'); sort($r); print_r($r);echo '<br>'; $c=count($r); echo myin_array('x',$r,0,floor($c/2),$c).'<br>'; echo myin_array('z',$r,0,floor($c/2),$c).'<br>'; echo myin_array('a',$r,0,floor($c/2),$c).'<br>'; echo myin_array('s',$r,0,floor($c/2),$c).'<br>'; ?> Bei großen bis größsten Datenmengen lohnt sich auch bei php4 die Anlage von Hashtabellen (siehe Fachliteratur) (Bei MySQL lass den SQL-Server suchen) mfg Klaus *********************************************** *Don't trust in operators, not even your self!* ** PHP4 - Tutorial und Referenz:www.ksweb.de ** ***********************************************
php::bar PHP Wiki - Listenarchive