Multidimensionale Arrays

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Multidimensionale Arrays

    Hi

    ich stehe gerade auf dem Schlauch und komme nicht weiter.
    Vielleicht könnt ihr mir ja helfen ?

    Ich würde gerne einen multidimensionalen Array nach einem Key durchsuchen und
    jedesmal wenn ich diesen Key finde, in einen neuen Array schreiben.
    So dass ich am Ende einen einfachen Array mit den alten Werten als Keys habe.

    Das durchsuchen klappt schon ganz gut, nur leider bekomme ich keinen einfachen Array aus meiner Funktion.
    Hat jemand nen Tipp was ich falsch mache ?

    PHP-Code:
    function find_logins_in_array($haystack$needle){    
        foreach(
    $haystack as $key => $val) {        
            if (
    is_array($val)){
                
    find_logins_in_array($val$needle);
            } else {
                if (
    $key == $needle){
                    echo 
    "key: $key und val: $val<br />";
                    
    $result[] = $val;
                }
            }
        }
        return 
    $result;

    Vielen Dank,
    bacca

  • #2
    das liegt daran, dass $result für jede instanz einer rekursionsebene neu belegt wird. was du damit erreichst, ist, dass du letzten endes nur die treffer der ersten ebene deines haystacks zurücklieferst.

    du hast zwei möglichkeiten:

    1. das $result muss per referenz als parameter an die funktion übergeben werden, so auch in jedem rekursiven aufruf. anschließend erzeugst du an der stelle, an der du die funktion brauchst, ein leeres array, übergibst es an die funktion und hast darin die ergebnisse.

    2. wie du siehst, schmeißt du in der vierten zeile den rückgabewert weiterer rekursionsaufrufe einfach weg. an dieser stelle könntest du sie stets aufgreifen und ersteinmal in das aktuelle $result hineinschreiben, etwa mit array_merge.

    erstere könnte ein wenig performanter sein.

    übrigens, was sind das für daten? mich wundert, dass man keys in einem verschachtelten array durchsuchen möchte. kommen sie aus der db? das sieht eher nach einem design fehler aus...

    Kommentar


    • #3
      wow. das ging ja schnell

      also erstmal vielen Dank für deine Antwort.
      Leider habe ich das immer noch nicht so richtig verstanden.

      Das die Neubelegung von $result bei jeder Rekursion ein Problem sein könnte habe ich mir auch schon gedacht.
      Und auch daran der Funktion einen Array mitzugeben, den sie füllen kann.
      Aber auch da mache ich wohl was falsch.

      Hier nochmal die Funktion:
      PHP-Code:
      function find_logins_in_array($haystack$needle$fillarray){    
          foreach(
      $haystack as $key => $val) {        
              if (
      is_array($val)){
                  
      find_logins_in_array($val$needle$fillarray);
              } else {
                  if (
      $key == $needle){
                      
      $fillarray[] = $val;
                  }
              }
          }
          return 
      $fillarray;

      Die Funktion wird folgendermaßen aufgerufen:
      PHP-Code:
      $einarray = array();
      $logins find_logins_in_array($params['symbol'], 'user'$einarray); 

      Das ganze Problem mit den Daten ist folgendes.
      Mein CMS übergibt meinem smarty Template einen Array.
      In diesem Array sind eine Menge Daten, die das Template braucht um zum Beispiel eine Blog-Übersicht anzuzeigen.
      In diesem Array stehen jetzt auch die Login Namen meiner User.
      Und die möchte ich gerne durch ihre Nicks ersetzen.

      Da ich meinen Code vom Quellcode des CMS trennen muss, kann ich diese Login/Nick Umsetzung nur im Template vornehmen.
      Deswegen diese komische Konstruktion.

      Lieben Gruß,
      bacca

      Kommentar


      • #4
        Original geschrieben von penizillin
        das $result muss per referenz als parameter an die funktion übergeben werden, so auch in jedem rekursiven aufruf.
        google mal nach "by reference".

        Kommentar


        • #5
          doppelt wow

          Jetzt gehts. Was so ein kaufmänisches Und so zu bewirken mag...

          Vielen Dank. Wieder was gelernt.


          Lieben Gruß,
          bacca

          Kommentar

          Lädt...
          X