Alicja: Funktion mit Parametern

Diese Funktion arbeitet fehlerfrei:

$myarr = array("v1" => "text1", "v2" => "text2", "v3" => "text3");
function get_param2($myarr){
 while(list($key, $val) = each($myarr)){
  if ($key == "v2"){
   echo $key . "=>" . $val . "<br>";
  }
 }
}
get_param2($myarr);

Ich muss aber den String den ich mit $key vergleiche als einen Parameter übergeben, also versuche ich folgendes:

$myarr = array("v1" => "text1", "v2" => "text2", "v3" => "text3");
function get_param1($myarr, $val){
 while(list($key, $val) = each($myarr)){
  if ($key == $val){
   echo $key . "=>" . $val . "<br>";
  }
 }
}
$val = "v2";
get_param1($myarr, $val);

Leider so funktioniert es nicht. Ich habe schon getestet mit
echo $key;
echo $val;
geprüft ob die Variablen gesetzt sind und ein Wert haben, alles ist in Ordnung, sogar den Type habe ich gepfüft, beide sind Strings, trotzdem werden $key und $val nicht verglichen. Hat jemand eine Idee warum?

  1. Diese Funktion arbeitet fehlerfrei:

    $myarr = array("v1" => "text1", "v2" => "text2", "v3" => "text3");
    function get_param2($myarr){
    while(list($key, $val) = each($myarr)){
      if ($key == "v2"){
       echo $key . "=>" . $val . "<br>";
      }
    }
    }
    get_param2($myarr);

    Ich muss aber den String den ich mit $key vergleiche als einen Parameter übergeben, also versuche ich folgendes:

    $myarr = array("v1" => "text1", "v2" => "text2", "v3" => "text3");
    function get_param1($myarr, $val){
    while(list($key, $val) = each($myarr)){
      if ($key == $val){
       echo $key . "=>" . $val . "<br>";
      }
    }
    }
    $val = "v2";
    get_param1($myarr, $val);

    Leider so funktioniert es nicht. Ich habe schon getestet mit
    echo $key;
    echo $val;
    geprüft ob die Variablen gesetzt sind und ein Wert haben, alles ist in Ordnung, sogar den Type habe ich gepfüft, beide sind Strings, trotzdem werden $key und $val nicht verglichen. Hat jemand eine Idee warum?

    Ja, nach

    while(list($key, $val) = each($myarr)){
    ist $key == "v1" und $val == "text1"

    Du verwendest die Variable $val für zwei Dinge. Einmal als Übergabe-Parameter für dem Key, den du ausgeben willst und dann wieder als Variable für die Werte des Arrays. Nimm als Übergabe-Parameter $sKey für seachKey.
    $myarr = array("v1" => "text1", "v2" => "text2", "v3" => "text3");
    function get_param1($myarr, $sKey){
     while(list($key, $val) = each($myarr)){
      if ($key == $sKey){
       echo $key . "=>" . $val . "<br>";
      }
     }
    }
    $sKey = "v2";
    get_param1($myarr, $val);

    Gruß

    Axel

    1. Du verwendest die Variable $val für zwei Dinge. Einmal als Übergabe-Parameter für dem Key, den du ausgeben willst und dann wieder als Variable für die Werte des Arrays. Nimm als Übergabe-Parameter $sKey für seachKey.
      $myarr = array("v1" => "text1", "v2" => "text2", "v3" => "text3");
      function get_param1($myarr, $sKey){
      while(list($key, $val) = each($myarr)){
        if ($key == $sKey){
         echo $key . "=>" . $val . "<br>";
        }
      }
      }
      $sKey = "v2";
      get_param1($myarr, $val);

      Gruß

      Axel

      Ja, promt als ich den Post abgeschickt habe habe ich es auch bemerkt, aber vielen Dank für die schnelle Reaktion.

  2. Huhu Alicja

    tja, manchmal sieht man den ($val)d vor lauter Bäumen nicht.

    [...]
    function get_param1($myarr, $val){            # $val
     while(list($key, $val) = each($myarr)){      # auch $val ???
    [...]

    Viele Grüße

    lulu

  3. Sers,

    $myarr = array("v1" => "text1", "v2" => "text2", "v3" => "text3");
    function get_param1($myarr, $val){

    <---------- HIER der PARAMETER $val

    while(list($key, $val) = each($myarr)){
      if ($key == $val){

    <-------------- HIER überschreibst du den PARAMETER

    echo $key . "=>" . $val . "<br>";

    <-------------------------------- Und nun vergleichst du den Key mit dem Value aus dem Array!

    }
    }

    Hier die Lösung:

    function get_param($arr, $key){
      if(is_array($arr) && in_array($key,array_keys($arr)))
        return $arr[$key];
    }

    rH

    1. Sers,

      $myarr = array("v1" => "text1", "v2" => "text2", "v3" => "text3");
      function get_param1($myarr, $val){
                                   <---------- HIER der PARAMETER $val
      while(list($key, $val) = each($myarr)){

      <-------------- HIER überschreibst du den PARAMETER

      if ($key == $val){

      <-------------- und nicht hier

      echo $key . "=>" . $val . "<br>";
            <-------------------------------- Und nun vergleichst du den Key mit dem Value aus dem Array!
        }
      }

      Hier die Lösung:

      function get_param($arr, $key){
        if(is_array($arr) && in_array($key,array_keys($arr)))
          return $arr[$key];
      }

      rH