Array-Keys dynamisch zusammensetzen

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

  • Array-Keys dynamisch zusammensetzen

    Hallo, folgendes:

    einer Funktion wird ein String à la "channel|0|item" übergeben. Dieser teilt der Funktion mit, welcher Teil eines Arrays genutzt werden soll. Dazu wird der String zerlegt:

    PHP-Code:
    $old_node explode("|",$old_node);

    foreach (
    $old_node AS $key => $value) {
        
    $node_str .= "[$value]";
    }

    $node_str substr($node_str,1,-1); 
    Nach diesem Durchgang sieht $node_str z.B. so aus: "channel][0][item". Ein Abruf des Array-Inhaltes mit diesem String funktioniert jedoch nicht:

    PHP-Code:
    foreach($array[$node_str] AS $key => $value) {
        
    // Verarbeitung... 

    Ein Manueller Durchlauf mit $array[channel][0][item] funktioniert jedoch. D.h. $node_str wird zusammen mit "[" und "]" nicht wie eine Anzahl an Keys behandelt, sondern wie ein einziger Key. Wie kann man es ermöglichen, dass auch dynamisch zusammengesetzte Keys abgearbeitet werden?

    Danke!
    Contentpapst 3.1 - Der Preisbrecher unter den Content-Management-Systemen
    www.contentpapst.de / WYSIWYG-Editor, Rechtesystem, eigene Module per GUI... // Demoversion
    [color=red]Ab sofort in Version 3.1![/color] / dazu auch Standalone Shop-System CP::Shop uvm.

  • #2
    Re: Array-Keys dynamisch zusammensetzen

    PHP-Code:
    $old_node explode("|",$old_node);

    foreach(
    $array[$old_node[0]][$old_node[1]][$old_node[2]] AS $key => $value) {
        
    // Verarbeitung... 

    Kommentar


    • #3
      Hallo, danke. Für das Beispiel klappt das natürlich. Das Problem ist jedoch, dass es beliebig viele Elemente in "$old_node" geben kann. D.h. die Keys müssten irgendwie zusammengesetzt werden.
      Contentpapst 3.1 - Der Preisbrecher unter den Content-Management-Systemen
      www.contentpapst.de / WYSIWYG-Editor, Rechtesystem, eigene Module per GUI... // Demoversion
      [color=red]Ab sofort in Version 3.1![/color] / dazu auch Standalone Shop-System CP::Shop uvm.

      Kommentar


      • #4
        Nach diesem Durchgang sieht $node_str z.B. so aus: "channel][0][item". Ein Abruf des Array-Inhaltes mit diesem String funktioniert jedoch nicht:
        Kein Wunder ist ja auch ein String und kein Array.

        Versuche mit $node_str = settype($node_str ,"array"); einen array raus zu machen.

        Kommentar


        • #5
          Nein, damit hängt es nicht zusammen. Ich kann ja auch einen String als Key einem Array übergeben. Noch mal zusammengefasst:

          PHP-Code:
          // (1) Funktioniert nicht

          $string "channel][0][item";
          echo 
          count($array[$string]);

          // (2) Funktioniert ebenso nicht

          $string "[channel][0][item]";
          echo 
          count($array.$string);

          // (3) Funktioniert

          $string "channel";
          echo 
          count($array[$string]);

          // (4) Funktioniert
          echo count($array[channel][0][item]); 
          Der letzte Fall soll also auch funktonierieren, wenn wie bei (1) ein String aus mehreren separierten Elementen übergeben wird.
          Contentpapst 3.1 - Der Preisbrecher unter den Content-Management-Systemen
          www.contentpapst.de / WYSIWYG-Editor, Rechtesystem, eigene Module per GUI... // Demoversion
          [color=red]Ab sofort in Version 3.1![/color] / dazu auch Standalone Shop-System CP::Shop uvm.

          Kommentar


          • #6
            ich hätte da zwar eine Idee, wie man das Problem lösen könnte, aber es ist nicht gerade sehr elegant. Möglich wäre es so:
            schreibe das "foreach($array[$node_str] AS $key => $value) {..." in eine temporäre php-Datei und include diese dann...

            PHP-Code:
            <?php
            $old_node 
            explode("|",$old_node);

            foreach (
            $old_node AS $key => $value) {
                
            $node_str .= "[$value]";
            }

            $node_str substr($node_str,1,-1);

            $filename "temp.php";
            $handle fopen($filename'w');
            fwrite($handle"<?php");
            fwrite($handle"foreach($array[$node_str] AS $key => $value) {");
            fwrite($handle"  // Verarbeitung...");
            fwrite($handle"}");
            fwrite($handle"?>");
            fclose($handle);

            include 
            $filename;
            ?>
            (das hab ich jetzt nicht getestet, so in etwa hab ich mit das gedacht...)

            Kommentar


            • #7
              Ok, dies ist zumindest eine Lösung die funktioniert. Habe diese jetzt auch eingebaut. Falls noch jemandem eine andere Lösung einfällt, bitte hier posten. Danke!
              Contentpapst 3.1 - Der Preisbrecher unter den Content-Management-Systemen
              www.contentpapst.de / WYSIWYG-Editor, Rechtesystem, eigene Module per GUI... // Demoversion
              [color=red]Ab sofort in Version 3.1![/color] / dazu auch Standalone Shop-System CP::Shop uvm.

              Kommentar

              Lädt...
              X