mehrdimensionales Array als HTML-Formular

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

  • mehrdimensionales Array als HTML-Formular

    Moin, moin,

    ich habe verschiedene mehrdimensionale Arrays, welche ich so als HTML-Formular darstellen will, dass man die Werte über text-felder bearbeiten und dann (mittels post des formulars) wieder als array in php bekommen kann.

    Beispiel:
    Array:
    PHP-Code:
    array(
       array(
          
    "MemberCount" => "5"
          
    "Definition" => array(
             
    "1" => "1.00" )
       ),
       array(
          
    "MemberCount" => "10"
          
    "Definition" => array( 
             
    "1" => "0.50"
             
    "2" => "0.30"
             
    "3" => "0.20")
       ),
       array(
          
    "MemberCount" => "1000000"
          
    "Definition" => array(
             
    "1" => "0.45"
             
    "2" => "0.25"
             
    "3" => "0.15"
             
    "4" => "0.10"
             
    "5" => "0.05")
          )
       )

    jetzt habe ich eine Funktion, die mir rekursiv das array durchgeht und für jedes "Blatt" des Astes ein text-feld erstellt.
    PHP-Code:
    function echo_array($array$return_me false$fieldName "") {
            
    $return "";
            if(
    is_array($array) == false){
                
    $return "The provided variable is not an array.";
            } else {
                foreach(
    $array as $name=>$value){
                    
    $fieldName .= "[$name]";
                    if(
    is_array($value)){
                        
    $return .= "";
                        
    $return .= "$name => <div style='margin-left:20px;'>";
                        
    $return .= $this->echo_array($valuetrue$fieldName);
                        
    $return .= "</div>";
                        
    $return .= "";
                    }else{
                        if(
    is_string($value)){
                            
    $value "$value";
                        }
                        
    $return .= "$name => <input type='text' name='constantValue$fieldName' value='$value' style='width:300px;' /><br />";
                        
    $fieldName str_replace("[$name]"""$fieldName);
                    }
                }
            }
            
            if(
    $return_me == true){
                return 
    $return;
            } else {
                echo 
    "<pre>".$return."</pre>";
            }
        } 
    Das Problem ist nun folgendes:
    Im name-Attribut des input-feldes sollte das Array wieder abgebildet werden, damit das nach dem Post nicht neu zusammengebaut werden muss.
    z.B.:
    name='constantValue[0][MemberCount]'
    und
    name='constantValue[0][Definition][1]'

    für die weiteren Elemente sollte dann z.B. folgendes stehen:
    name='constantValue[1][MemberCount]'
    und
    name='constantValue[1][Definition][1]'
    bzw.
    name='constantValue[1][Definition][2]'

    das klappt aber in der o.g. Funktion nicht, da die Funktion nicht weiß wann und wie viele Elemente in $fieldName gelöscht werden müssen, um z.B. das erste Element [0] durch [1] zu ersetzen und anschließend alle weiteren elemente wieder hinzuzufügen.

    Ich hoffe, meine Beschreibung hat nicht noch mehr verwirrung gestiftet

    Ich wäre über eine Lösung oder einen Weg dorthin dankbar.
    Angehängte Dateien

  • #2
    meinst du sowas?
    PHP-Code:
    <?php
    <form method="post">
        <
    input type="text" name="constantValue[1][MemberCount]" value="0"/><br />
        <
    input type="submit" name="submit" value="senden" />
    </
    form>


    echo 
    "<pre>";
    print_r($_POST);
    echo 
    "</pre>";
    ?>
    ergibt
    PHP-Code:
    Array
    (
        [
    constantValue] => Array
            (
                [
    1] => Array
                    (
                        [
    MemberCount] => 0
                    
    )

            )

        [
    submit] => senden

    Kommentar


    • #3
      ja, genau sowas soll rauskommen. Das Problem ist ja eher, wie ich da hinkomme. Die funktion "echo_array" schreibt ja die input-felder und dort soll das Array abgebildet werden.

      In der Funktion weiß ich zwar, wann ich kein Array mehr habe und ein Text-Feld ausgeben muss, aber es kann durchaus sein, dass ich ja nicht nur eine Ebene zurückgehe, sondern gleich auf die oberste Ebene zurückfalle um dort mit Element 1 weiterzumachen. Und ich weiß in der Funktion nicht, wieviele der []-Klammern ich löschen/zurücksetzen muss um statt der [0][Definition][1] -> [1][MemberCount] auszugeben. (hier z.B. springe ich von ebene 3 auf 1 und bilde den $fieldName im Prinzip neu aber: woher soll ich das in der Funktion wissen?)

      Kommentar


      • #4
        Sieh dir mal diese Funktion an:
        PHP-Code:
        function write_array($ar$name){
            foreach (
        $ar as $key => $val){
                if (
        is_array($val)){
                    
        write_array($val $name "[" $key "]");
                }
                else{
                    echo 
        "<input name='" $name "[$key]' value='$val' /><br>";
                }
            }

        Dieser übergibst du einen beliebigen Array und einen initialen Namen ($name).
        Nach dem Abschicken hast du den Array dann z.B. in $_POST[$name]. Lässt sich natürlich noch weiter ausbauen (Einrückungen, etc).

        PS
        Und lass die Crossposterei, sonst erfährst du von mir nichts mehr!
        Zuletzt geändert von H2O; 11.04.2008, 11:24.
        Gruss
        H2O

        Kommentar


        • #5
          ja, das sieht schonmal sehr gut aus..

          ich wusste, dass es einfach ist, aber manchmal sieht man den Wald vor lauter Code nicht.

          Danke!

          Kommentar

          Lädt...
          X