Probleme mit array_search()
Bobby
- php
Moin
ich habe folgendes Problem. Es existiert ein array das ungefähr so gefüllt ist:
$gebiet=array(0=>"1",
1=>"7",
2=>11);
dazu noch ein Objekt $fachgebiet welches nun nach den einzelnen Angaben im Array $gebiet durchsucht werden soll.
Dies habe ich folgendermaßen realisiert:
$selected="";
if ( array_search ( $fachgebiet->id, $gebiet ) )
{
$selected='checked="checked"';
}
Nun wird aber der erste Wert des Arrays, also $gebiet[0] nicht gefunden, bzw gar nicht nach diesen gesucht! Es gibt definitiv eine fachgebiet->id=1 (aus einer DB ersichtlich) und eine $gebiet[0]=1
Ich hoffe dies war halbwegs verständlich ausgedrückt. Gibt es dafür eine Erklärung? wird mit dieser Funktion niemals der erste wert indiziert?
Gruß Bobby
Hi,
probier mal
if ( array_search ( $fachgebiet->id, $gebiet ) != false )
Das Problem ist, dass array_search 0 zurückgibt, wenn sind der Wert an Position 0 im Array befindet.
Oder benutze die Funktion in_array()
Gruß
Moin
Hi,
probier mal
if ( array_search ( $fachgebiet->id, $gebiet ) != false )
Das funktionierte auch nicht!!!
Oder benutze die Funktion in_array()
Aber genau ds hier ist die Lösung. DANKE
Gruß Bobby
Moin
Ok, habs etwas falsch ausgedrückt.
$gebiet=array(0=>"1",
1=>"7",
2=>11);
Das stimmt soweit
Die folgende Function liefert kein Ergebnis, obwohl eines geliefert werden müsste:
$selected="";
if ( array_search ( "1", $gebiet ) )
{
$selected='checked="checked"';
}
Warum wird der Wert 1 nicht im Array $gebiet gefunden?
Gruß Bobby
Hi Bobby!
if ( array_search ( $fachgebiet->id, $gebiet ) )
{
$selected='checked="checked"';
}
Wenn array_search etwas findet ist der Rückgabewert der Schlüssel des Elements. Also in deinem fall 0. 0 ist aber auch boolsch zu verstehen (=false). Da du aber if(array_search...) abfragst und 0 zurück geliefert wird ist es klar, dass bei 0 nichts eingetragen wird, weil 0=false entspricht und dann deine Schleife nicht greift. Weiteres siehe:
http://de.php.net/manual/de/function.array-search.php
tschau
ichen
Hallo
> $gebiet=array(0=>"1",
> 1=>"7",
> 2=>11);
// [...]
> if ( array_search ( $fachgebiet->id, $gebiet ) )
Nun wird aber der erste Wert des Arrays, also $gebiet[0] nicht gefunden,
Grundsätzlich ist natürlich, wie Du bereits gelernt hast in_array() die
richtige Wahl.
Du solltest es Dir aber abgewöhnen, solche Konstrukte wie
> if ( array_search ( $fachgebiet->id, $gebiet ) )
zu verwenden. Wie ichen bereits ausgeführt hat, wird der Rückgabewert 0 als
false ausgewertet. Daher teste in vergleichbaren Fällen auf Identität, siehe
http://www.php.net/manual/de/language.operators.comparison.php
if ( false !== array_search ( $fachgebiet->id, $gebiet ) )
Freundliche Grüße
Vinzenz
echo $begrüßung;
if ( array_search ( $fachgebiet->id, $gebiet ) )
Nun wird aber der erste Wert des Arrays, also $gebiet[0] nicht gefunden, bzw gar nicht nach diesen gesucht! Es gibt definitiv eine fachgebiet->id=1 (aus einer DB ersichtlich) und eine $gebiet[0]=1
Da der Fehler mittlerweile erklärt wurde, bleibt mir nur noch, (abermals) die Wichtigkeit von Kontrollausgaben zu betonen. Variableninhalte und die Ergebnisse von Funktionen und Ausdrücken sich auszugeben (echo, var_dump()) hilft bei der Suche nach solchen Fehlern.
Zugegeben, diese Stelle ist etwas trickreich. array_search() liefert im konkreten Fehlerfall eine 0. Hier könnte man unachtsamerweise übersehen, dass die im boolschen Kontext zu false wird. Da aber der Bedingungsausdruck von if immer boolesch ausgewertet wird, kann man sich durch einen erzwungenen Typecast das Ergebnis deutlicher vor Augen führen:
var_dump(array_search($fachgebiet->id, $gebiet));
var_dump((bool) array_search($fachgebiet->id, $gebiet));
echo "$verabschiedung $name";