phpbar.de logo

Mailinglisten-Archive

Re: [php] key und arrays
Archiv Mailingliste php_(at)_infosoc.uni-koeln.de

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [php] key und arrays



Hi Reiner,

> Ich vermisse übrigens in PHP eine Funktion, die prüft, ob ein Wert in
> einem Array vorhanden ist (oder habe ich die übersehen?). Also etwa:
> if ($a in $b) {...}.

Tatsächlich, sowas scheint´s nicht zu geben (jedenfalls habe ich auch
nichts dergleichen entdecken können).
Man könnte sich natürlich eine Funktion schreiben, die einfach alle
Elemente in einem Array durchgeht, und "true" zurückliefert, wenn das
gesuchte dabei war. Das ist aber sicher nicht sehr schnell und
irgendwie auch "unelegant"...

Folgender "Trick" fällt mir gerade ein, mit dem man es auch anders
schaffen könnte ("completely untested" allerdings):
Voraussetzung ist, daß einem die Reihenfolge der Elemente im Array egal
ist. Dann könnte man das Array auch zu einem assoziativen Array
machen (in PHP ist ja eigentlich sowieso jedes eins) und die
eigentlichen Werte als Key und einen "dummy"-Wert als value
abspeichern. In etwa so:

// aus diesem Feld
// $a[1] = "bli"; $a[2] = "bla"; $a[2] = "blu";
// macht man
$a["bli"] = "yes"; $a["bla"] = "yes"; $a["blu"] = "yes";
// (anstatt "yes" kann man natürlich auch was völlig anderes nehmen)
//
// an der Stelle, wo die Abfrage "$b enhalten in $a ?" stattfindet
// kann man dann folgendes machen
if (isset($a[$b]) { echo "Jawollja!"; }

Das ist vermutlich wesentlich schneller als alle Array-Elemente
durchzugehen.

> Es gibt noch eine vierte Möglichkeit: Man speichert mehrere durch
> Kommata getrennte Werte in einem Feld wie "123,234,345,456". In der
> SQL-Abfrage geht dann z.B.: "select * from tabelle1, tabelle2 where
> feld.tabelle1 in (liste.tabelle2)", wobei "liste" das feld mit obiger
> Liste in tabelle2 ist und "feld" ein Feld in tabelle1 mit einem Wert
> der möglicherweise in dieser Liste vorkommt.

Mmhh, ich habe jetzt ehrlich gesagt dieses "...in..."-Konstrukt in SQL
noch nie verwendet. Aber sollte das nicht
"select * from tabelle1, tabelle2 where tabelle1.feld in
(tabelle2.liste)"
heissen?

CU,
Manuel

-- 
Quote of the month:
"The parade that´s electrical, it serves no real purpose
 Takes up a lot of juice, just to impress us."
	(No Doubt, "Tragic Kingdom")




Home | Main Index | Thread Index

php::bar PHP Wiki   -   Listenarchive