Ergebnis 1 bis 7 von 7

Thema: [Gelößt] array_key_exists() in serialisierendes Array

  1. #1
    Gesperrt
    Registriert seit
    03.04.2010.
    Ort
    Mosbach
    Beiträge
    338

    Frage [Gelößt] array_key_exists() in serialisierendes Array

    Ich habe einen Wert, zu dem ich den dazugehörigen Key erhalten will. Das sieht in etwa so aus:
    PHP-Code:
    $meinLabel 'Wert2';
    $meinArray 'a:2:{i:0;a:2:{s:5:"value";s:2:"w1";s:5:"label";s:5:"Wert1";}i:1;a:2:{s:5:"value";s:2:"w2";s:5:"label";s:5:"Wert2";}}';

    $meinKey array_key_exists($meinLabel$meinArray); 
    Das sollte so aussehen:
    PHP-Code:
    $meinKey $meinArray[1]['value']; // = w2 
    Leider funktioniert das so nicht. Da kommt Warning: array_key_exists() expects parameter 2 to be array, string given...

    Wieso übergebe ich einen String? Ist $meinArray kein Array?
    Ich habe es auch mit deserialize probiert, aber dann bekomme ich gar nichts ausgegeben.
    PHP-Code:
    $meinArray_des deserialize($meinArraytrue);
    $meinKey array_key_exists($meinLabel$meinArray_des); 

    cu.Oden
    ...der mal wieder auf'm Schlauch steht...

  2. #2
    AG CMS-Garden
    Contao-Urgestein
    Avatar von lindesbs
    Registriert seit
    05.06.2009.
    Ort
    Oer-Erkenschwick
    Beiträge
    4.154
    Partner-ID
    keine
    User beschenken
    Wunschliste

    Standard

    Du musst durch das mehrdimensionale Array iterieren. Sieht so aus :

    Array
    (
    [0] ⇒ Array
    (
    [value] ⇒ w1
    [label] ⇒ Wert1
    )

    [1] ⇒ Array
    (
    [value] ⇒ w2
    [label] ⇒ Wert2
    )

    )
    von Willi Voltz aus PR 500: Henry George sagte einmal: »Kultur ist Zusammenarbeit.«


    Contao-Hosting: begeisterter Uberspace-Nutzer

  3. #3
    Gesperrt
    Registriert seit
    03.04.2010.
    Ort
    Mosbach
    Beiträge
    338

    Standard

    Das zeigt er mir so mit print_r an. Aber was genau mache ich da jetzt? In eine foreach-Schleife und dann da den Wert suchen?


    cu.Oden

  4. #4
    Contao-Urgestein
    Registriert seit
    03.06.2010.
    Ort
    Wuppertal
    Beiträge
    2.149
    User beschenken
    Wunschliste

    Standard

    PHP-Code:
    $meinArray 'a:2:{i:0;a:2:{s:5:"value";s:2:"w1";s:5:"label";s:5:"Wert1";}i:1;a:2:{s:5:"value";s:2:"w2";s:5:"label";s:5:"Wert2";}}'
    Das ist ein String. PHP weiß nicht was da drin ist. Könnte ja auch Objekt sein.

    D. h. deserialize() anwenden ist richtig und muss so sein.

    Allerdings verwendest du die falsche Funktion.

    Dein Array sieht so aus:
    Code:
    array
      0 => 
        array
          'value' => string 'w1' (length=2)
          'label' => string 'Wert1' (length=5)
      1 => 
        array
          'value' => string 'w2' (length=2)
          'label' => string 'Wert2' (length=5)
    Mit array_key_exists prüfst du auf existierende Schlüssel, hier also:
    Code:
    0, 1
    Denn von Haus aus kann die Funktion nicht mit multidimiensionalen Arrays umgehen.

    Du suchst aber "Wert 2", das ist kein Schlüssel, sondern ein Wert.

    http://de.php.net/array_search
    Da hilft dir diese Funktion hier, aber auch die kann nicht von Haus aus mit multidimensionalen Arrays umgehen...

    PHP-Code:
    <?php
    $arr 
    unserialize('a:2:{i:0;a:2:{s:5:"value";s:2:"w1";s:5:"label";s:5:"Wert1";}i:1;a:2:{s:5:"value";s:2:"w2";s:5:"label";s:5:"Wert2";}}');

    function 
    array_search_r($needle$haystack){
        
    $match false;
        foreach(
    $haystack as $value){
            if(
    is_array($value))
                
    $match=array_search_r($needle$value);
            if(
    $value==$needle)
                
    $match=1;
            if(
    $match)
                return 
    1;
        }
        return 
    0;

        
        
    var_dump(array_search_r('Wert2'$arr));
    Diese Funktion würde dir 1 bzw. 0 zurück geben für gefunden bzw. nicht gefunden...

    Die Funktion ist von hier: http://de3.php.net/manual/de/functio...arch.php#31280
    Nur angepasst um die Notice Fehlermeldungen zu entfernen...

  5. #5
    Gesperrt
    Registriert seit
    03.04.2010.
    Ort
    Mosbach
    Beiträge
    338

    Standard

    Upps... ganz schön viel Tobak!
    Mit array_search und auch it in_array hatte ich es zuerst probiert, was ja auch nicht ging. Aber ich versuche jetzt mal durch die Funktion durchzublicken. THX!


    cu.Oden

  6. #6
    Gesperrt
    Registriert seit
    03.04.2010.
    Ort
    Mosbach
    Beiträge
    338

    Standard

    Frage: Für was brauche ich diese Funktion, die mir 0 und 1 ausgibt, wenn ich das auch mit array_key_exists('Wert2', $arr) erreichen kann? Davon abgesehen, brauche ich das auch nicht wirklich, weil ich immer nur existierende Werte abfrage, da diese später aus einem Select-Feld kommen, also fest vordefiniert sind. Aber ich muß an der entsprechenden Auswahl dann eben erkennen, welche Schlüssel dazu gehört, was ich auch anhand deiner guten Erklärungen, noch immer nicht herausbekommen habe. ???


    cu.Oden

  7. #7
    Gesperrt
    Registriert seit
    03.04.2010.
    Ort
    Mosbach
    Beiträge
    338

    Standard

    Ich hab's! War wieder eine schwere Geburt (für mich) aber naja, Zeit muß man sich halt nehmen... ;-)

    Die Lösung schaut dann so aus:

    PHP-Code:
    $arr unserialize('a:2:{i:0;a:2:{s:5:"value";s:2:"w1";s:5:"label";s:5:"Wert1";}i:1;a:2:{s:5:"value";s:2:"w2";s:5:"label";s:5:"Wert2";}}');
    echo 
    "<pre>";
    print_r($arr);
    echo 
    "</pre>";

    foreach(
    $arr as $inArray){
        if(
    $inArray['label'] == "Wert2"){
            
    $valueItem $inArray;
            break;
        }
    }

    echo 
    $valueItem['value'];

    // Ergebnis = w2 

    cu.Oden

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •