phpbar.de logo

Mailinglisten-Archive

[php] AW: [php] Workaraounf fuer in_array()

[php] AW: [php] Workaraounf fuer in_array()

Klaus Schmidt ks_(at)_ksweb.de
Tue, 7 Nov 2000 18:30:57 +0100


#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