mmofacts.com

In_array oder nicht in_array...

gepostet vor 18 Jahre, 7 Monate von shizo
Hiho,

ich habe mal eine ganz bescheidene Frage. Es geht um die eigentlich ganz harmlose Funktion in_array().
Also, erst das Problem, dann die Beschreibung...

Problem:
Ich benutz die Funktion in der Art if(in_array(...,...)){}
Dieses if wird auch ausgeführt, wenn in_array ein "true" zurückgibt. Nur zeitgleich kommt eine Warnung:
Warning: in_array(): Wrong datatype for second argument in /www/htdocs/v125756/forum/rpg_map.php on line 140
In line 140 ist genau diese Funktion.
Wie gesagt, ausgeführt wird sie und es funktioniert soweit auch alles, aber diese Warnung ist arg lästig.

Beschreibung:
Also, was hab ich mit der Funktion denn gemacht... folgendes:
if ( in_array($spawn_r['id'],$spawn_monster[$a])) ) {

//blabla
}
Den array $spawn_r hole ich mir zwei Zeilen drüber aus einem doppelten array.
Der array $spawn_monster ist ebenfalls ein doppelter array, mit $a greife ich auf die einzelnen Zeilen zu; klar.
In der Summe hab ich also schlicht eine Zahl in der Variablen und schaue, ob sie in dem array drin ist. Logisch, wofür sollte die Funktion sonst gut sein.

Aber wie gesagt, ich bekomme bei der ganzen (sonst funktionierenden) Sache immer diese %&§(% Warnung.
Weiß jemand rein Zufällig, was da so eine Warnung provozieren könnte?

Dank für jede Antwort

Shizo
gepostet vor 18 Jahre, 7 Monate von Drezil
http://de.php.net/manual/de/function.in-array.php

bool in_array ( mixed needle, array haystack [, bool strict] )
Anmerkung: In den PHP Versionen vor 4.2.0 durfte needle kein Array sein

wenn du wirklich nur aufeine zahl prüfst probier mal:
$zahl = $wert['aus']['einem']['array'];

if (in_array($zahl,$array_2d['bla'])) {...}
hth
gepostet vor 18 Jahre, 7 Monate von knalli
Hm.. lt Fehlermeldung, Second Arg.. also ist dein 2. Argument in der speziellen Laufzeit wohl kein Array. Aushilfe: mittels !is_array() abfangen und debuggen (bsp. mit print_r())

oder habe ich da jetzt irgendwas missverstanden?
gepostet vor 18 Jahre, 7 Monate von shizo
@ Drezil
Das mit der vorherigen Variablendeklaration hat da leider nichts dran geändert, dennoch danke.

Ich und meine lachse Ausdrucksweise... schlimm, sorry.
Also es handelt sich beidesmal um Zahlen, das stimmt in jedem Fall.
$spawn_r['id'] kommt im Endeffekt aus der DB und ist laut dieser ein Integer. Soweit so gut.
$spawn_monster, diesen Doppelarray, hab ich aus einem DB-Eintrag mit Hilfe von explode() bekommen. Nun liefert explode leider strings und keine integer; na so ein Ärger.
Ist das der Grund der Warnung, dass ich einen integer in einem Sammelsurium von strings suche? -.-#

Selbst wenn... ist es im Grunde nicht egal, wenn ich einen string, der aus einer Zahlenfolge besteht, als integer behandle? Sonst nicht, das ist klar.

Gut, dann wird das das Problem sein. Aber ich habe ja aus... nennen wir es Vorhersicht und nicht Vorsicht... kein "true" hinten an das in_array() ran geschrieben, damit der Typ nicht zu einem Problem führt.
gepostet vor 18 Jahre, 7 Monate von shizo
@ Knalli
Ach dat gibbet doch nicht... du hast recht... ich hab den vermeindlichen array zwar aus zwei explode() bekommen, daber der hat in diesem ganz bestimmten Fall nur einen einzigen Eintrag und ist somit gar kein richtiger array.
Jetzt hab ich eine Sicherung eingebaut und siehe da... alles geht tadellos. Oh man... da könnt ich fast rot werden ^^#

Vielen Dank ^^
gepostet vor 18 Jahre, 7 Monate von Macavity
nicht ganz.

wenn es so wäre sollte eine ausgabe erfolgen

 

$such_array = array(5);

if(in_array(5,$such_array)){
echo "sollte ausgegeben werden.";
}


nur wenn halt das zu durchsuchende array an der stelle $a kein array ist

also:
 

$such_array[0] = array(5,10,34);
$such_array[1] = array(10,12);
$such_array[2] = 5;

for($i = 0; $i < count($such_array); $i++){
if(in_array(5,$such_array[$i])){
echo "
Bei 0 und 1 kein problem wobei nur 0 eine ausgabe gibt, bei 2 müsste aber ein fehler kommen..bzw eine warnung";
}
}
gepostet vor 18 Jahre, 7 Monate von knalli
 
$a = 1;
$b = 2;
$c = in_array($a,$b);


= > Fehler. Nicht mehr, nicht weniger.
gepostet vor 18 Jahre, 7 Monate von shizo
@ Macavity
Exakt so war es... -.-
So und nicht anders...

Na ja, schlauer geworden in mehrfacher Hinsicht, danke an alle drei.

Auf diese Diskussion antworten