Bobby: Probleme mit array_search()

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

--
-> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
-> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
  1. 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ß

    1. 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

      --
      -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
      -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
      ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
  2. 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

    --
    -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
    -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
    ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
  3. 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

    --
    Ichen
  4. 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

  5. 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";