mehrdimensionales Array als HTML-Formular

mindhead

Grünschnabel
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:
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:
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($value, true, $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.
 
Bis jetzt ist es vom Array her gesehen ja noch nicht Recrusive.
Momentan gibt es eigendlich nur: Array Nr und Definitions Nr.

Ich würde das ganze noch etwas ausbauen und ein Feld wie Typ hinzufügen und somit das ganze erweitern auf mehr als nur Textfelder...
 
mmh, naja, die funktion "echo_array" ist rekursiv.
Worum es mir geht ist, dass ich das namens-Attribut in der Funktion so setze, dass ich nach dem post des formulars wieder das "richtige" array in php habe.

Da verstehe ich nicht ganz, was ich mit einem zusätzlichen Feld (wie z.B. typ) gewonnen habe.

Vielleicht kannst Du mir das nochmal erklären?
 
Es gibt Felder wie:
Ich stimme den Agb´s zu.
Wählen sie Ihr alter usw...
Wo Radio, Select, Checkbox oder Textarea die besseren Felder sind...
 
darum geht es hier aber nicht.
das ist z.B. ein Array mit dem einstellungen für eine Applikation definiert werden. hier z.B. wie viel Geld die ersten einer Gruppe aus einem Jackpot gewinnen (z.B. bei 5 bis 10 Mitgliedern erhält der erste 50% des Jackpots, der zweite 30%, der dritte 20%)

Das hat nix mit Alter, AGBs oder sowas zu tun.
 
Zurück