PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Strings mit $



ThorstenHirsch
15-03-2004, 12:27
Servus!

Hab' mal wieder ein Problem:

if(in_array($wert, $array))
benutze ich für viele verschiedene Arrays. Ist in den Array kein $-Zeichen enthalten, funktioniert's auch problemlos, aber bei Strings wie z.B. "ABC$DE" oder "DETLEF$" gibt mir if immer false zurück, zusammen mit dieser Fehlermeldung:

Warning: in_array(): Wrong datatype for second argument in blubb.php on line 26
Zeile 26 ist die Zeile mit obiger if-Abfrage.
Jetzt kann ich leider die Strings nicht verändern, manche müssen eben mit $ bleiben. Hab ich irgendeine Möglichkeit if zu sagen, dass es den Inhalt von $array nicht interpretieren sondern wörtlich nehmen soll?

Gruß,
Thorsten

Pingu
15-03-2004, 13:45
Was sagt das Manual (http://www.php.net/manual) auf php.net (http://www.php.net) dazu?

Strings / Zeichenketten - Doppelte Anführungszeichen (Double quoted) (http://de3.php.net/manual/de/language.types.string.php#language.types.string.sy ntax.double)
Wenn ein String in doppelten Anführungszeichen (") eingeschlossen ist, versteht PHP mehr Escape-Folgen für spezielle Zeichen:
[TABELLE]
Das wichtigste Merkmal von double-quoted Strings ist die Tatsache, dass Variablennamen ausgewertet werden. Für Details siehe String Analyse (parsing) (http://de3.php.net/manual/de/language.types.string.php#language.types.string.pa rsing)

Pingu

undefined
15-03-2004, 17:52
*räusper* ;)
Bitte auch die Fehlermeldung lesen ;)
Du suchst nicht in einem Array oder Eindimensionalen Array.



if (is_array($array) && (in_array($wert, $array)) {
....

http://de2.php.net/manual/de/function.in-array.php

ThorstenHirsch
16-03-2004, 08:44
So einfach ist's leider nicht.

Im Fall wo's funktioniert hab ich $array folgendermaßen erzeugt:

$array=array('blubb','blobb','foo');
und die Fehlermeldung kommt bei folgendem $array:

$array=array('BL$UBB','BLOBB$','F$OO');
Also für mich sieht beides nach einem Array aus und ich benutze auch in beiden Fällen einfache Anführungszeichen und keine doppelten.

Gruß,
Thorsten

ThorstenHirsch
16-03-2004, 08:53
Ach und noch ne kleine Ergänzung, denn vielleicht läuft ja hier schief:

for($i=0;$i<count($array);$i++){
$ldaparray["hugo"][]=$array[$i];
}
Das muss ich machen, weil ldap nen assoziativen Array (Hash) erwartet. Also will ich dem Schlüssel "hugo" (->LDAP-Attribut) meinen Array zuordnen, weil es sich um ein Multi-Value-Attribut handelt. Es funktioniert ja auch, wie gesagt, aber eben leider nur wenn in array[$i] kein String in Großbuchstaben mit nem $ in der Mitte oder am Ende steht.

edit: nee, kann nix damit zu tun haben, das kommt ja erst viel später, nach dem in_array() - also lasst euch durch diesen Beitrag nich verwirren ;)

ThorstenHirsch
16-03-2004, 09:15
Argh, ich TROTTEL!!!!

undefined, schlag mich! $array war wirklich kein Array - $wert ist nämlich $array[$i] und $array ist der Array, den mein LDAP-Eintrag mir liefert. Beim Erstellen des Eintrags ist $array allerdings noch leer und somit stimmt die Fehlermeldung wieder, dass $array kein array ist. Mit Dollars und Großschreibung hat's also alles nix zu tun - ich hab einfach nur $wert mit $array verwechselt weil ich $wert aus $array bilde und $array nicht aus $array sondern nur indirekt mit $array zu tun hat - die Werte können gleich sein, aber $array kann (wie hier) auch einfach leer sein.

Hmm...war das verständlich? Egal, schlag mich einfach ;)