[PHP] - Aus Array Formular erstellen, umso Werte über Formular zu ändern

Benutzer-621

abgemeldet
20 April 2006
744
64
Moin,
möchte über'n Array ein Formular erstellen, sodass ich dann im Array einzelne Werte ändern kann. Aktuell liegt das Problem darin, an die Namen für die einzelnen INPUT/TEXTAREA-Elemente zu kommen. Habs halt schon teilweise mit Rekursion versucht, bin aber noch net am Ziel. Wie ichs mir vorstelle siehe unten. Wäre auf jeden Fall schonmal sehr dankbar, wenn Du mir weiterhelfen kannst :D.

PHP:
<?php

  $inxs = array("site" =>
          array("forum" =>
          array("klamm forum" =>
          array("user" => "luke", "mone", "tester", "theHacker"))));

  // fast gleiche wie oben, aber wohl leichter zu verstehen???
  $inxs['site']                    = array("klamm");
  $inxs['site']['forum']           = array("klamm forum");
  $inxs['site']['forum']['user']   = array("luke", "mone");

  bearbeite($array);

  // soll nun folgende Ausgabe ergeben
  <input type="text" name="inxs[site]" value="klamm"></input>
  <input type="text" name="inxs[site][forum]" value="klamm forum"></input>
  <input type="text" name="inxs[site][forum][user][0]" value="luke"></input>
  <input type="text" name="inxs[site][forum][user][1]" value="mone"></input>
  <input type="text" name="inxs[site][forum][user][2]" value="tester"></input>
  <input type="text" name="inxs[site][forum][user][3]" value="theHacker"></input>

?>
 
inxs[site][forum][user][3] ist aber dann die maximale Tiefe, oder? Sonst müsste man da ggf. echt mir Rekursion ran afaik.

*editieren werd*

Als Tipp schon mal: foreach! ;)

Edit: Also ich weiß nicht, ob die Array-Struktur so wirklich sinnvoll ist...

PHP:
  $inxs = array("site" =>
          array("forum" =>
          array("klamm forum" =>
          array("user" => "luke", "mone", "tester", "theHacker"))));

  // fast gleiche wie oben, aber wohl leichter zu verstehen???
  $inxs['site']                    = array("klamm");
  $inxs['site']['forum']           = array("klamm forum");
  $inxs['site']['forum']['user']   = array("luke", "mone");

Ist das wirklich das gleiche. *grübel*
Du hast irgend einen Fehler da drin!

Alleine schon der site-Index.. steht in $inxs noch mehr? ^^
 
inxs[site][forum][user][3] ist aber dann die maximale Tiefe, oder? Sonst müsste man da ggf. echt mir Rekursion ran afaik.

*editieren werd*

Als Tipp schon mal: foreach! ;)

Edit: Also ich weiß nicht, ob die Array-Struktur so wirklich sinnvoll ist...



Ist das wirklich das gleiche. *grübel*
Du hast irgend einen Fehler da drin!

Alleine schon der site-Index.. steht in $inxs noch mehr? ^^


war nur als Bsp., natürlich solange bis kein Array.

mit foreach schon bissl versucht, das eigentliche Prob ist den Namen der Felder zu bekommen/generieren.

Naja is nicht wirklich das Gleiche (müsste glaub auch fehlerhafte Ausgabe erscheinen), soll nur so dranstehn ums "schneller" zu checken ;)
 
war nur als Bsp., natürlich solange bis kein Array.

mit foreach schon bissl versucht, das eigentliche Prob ist den Namen der Felder zu bekommen/generieren.

Naja is nicht wirklich das Gleiche, soll nur so dranstehn ums "schneller" zu checken ;)

Hast du mal ein konkretes Beispielarray mit jeweils mehreren Elementen in den Dimensionen? Ist ein bissl schwer vorstellbar atm...
Hm mit foreach und is_array sollte das eigentlich wunderbar klappen. :D
 
naja, mal eben so schnell zusammengestellt *:D*, hoffe mal man erkennt was, also im INPUT-Name steht z.B. dann

arr[branche][energie][öl][bp][chefs][ceo][bill gates][friends][waltons][0] und im Wert des Feldes steht dann eben sam :D

PHP:
$arr['branche']['energie']['öl']['bp']['produkte'] = array("kekse", "lollis", "zigaretts", "bild");

$arr['branche']['energie']['öl']['bp']['chefs'] = array("ceo" => array("bill gates" => array("friends" => array("musiker" => array("mc hammer", "acdc", "frank zappa", "abba"), "waltons" => array("sam", "bruce", "michael")))),"cmo" => "jay-z","cfo" => "bruce");


Array
(
    [branche] => Array
        (
            [energie] => Array
                (
                    [öl] => Array
                        (
                            [bp] => Array
                                (
                                    [produkte] => Array
                                        (
                                            [0] => kekse
                                            [1] => lollis
                                            [2] => zigaretts
                                            [3] => bild
                                        )

                                    [chefs] => Array
                                        (
                                            [ceo] => Array
                                                (
                                                    [bill gates] => Array
                                                        (
                                                            [friends] => Array
                                                                (
                                                                    [musiker] => Array
                                                                        (
                                                                            [0] => mc hammer
                                                                            [1] => acdc
                                                                            [2] => frank zappa
                                                                            [3] => abba
                                                                        )

                                                                    [waltons] => Array
                                                                        (
                                                                            [0] => sam
                                                                            [1] => bruce
                                                                            [2] => michael
                                                                        )

                                                                )

                                                        )

                                                )

                                            [cmo] => jay-z
                                            [cfo] => bruce
                                        )

                                )

                        )

                )

        )

)
 
Zuletzt bearbeitet:
Mal eine grundsätzliche Frage:

Deine letzte Array-Struktur liese sich viel besser auf eine relationale Datenbank abbilden.

Dann müsstest du nur die Tabellen befüllen und alles würde einfacher ;)

Gruß

edit: Hilft ansonsten vielleicht, wenn du uns das Problem grundlegend erläuterst.
 
Mal eine grundsätzliche Frage:

Deine letzte Array-Struktur liese sich viel besser auf eine relationale Datenbank abbilden.

Dann müsstest du nur die Tabellen befüllen und alles würde einfacher ;)

Gruß

edit: Hilft ansonsten vielleicht, wenn du uns das Problem grundlegend erläuterst.

Problem gibts ja eigentlich nicht "direkt", weiß nur net so wirklich wie ich an die Schlüssel und Werte kommen soll etc.

Eigentlich ists ja nichts Anderes als ne Baumstruktur, und von der solln nun alle Schlüssel und Werte ausgegeben werden, ich zeigs mal am oberen Array-Bsp., wie die Ausgabe dann aussieht. Es müsste dann eigentlich exakt Unteres erscheinen.

HTML:
<input type="text" name="arr[branche][energie][öl][bp][produkte][0]" value="kekse"></input>
<input type="text" name="arr[branche][energie][öl][bp][produkte][1]" value="lollis"></input>
<input type="text" name="arr[branche][energie][öl][bp][produkte][2]" value="zigaretts"></input>
<input type="text" name="arr[branche][energie][öl][bp][produkte][3]" value="bild"></input>

<input type="text" name="arr[branche][energie][öl][bp][chefs][ceo][bill gates][friends][musiker][0]" value="mc hammer"></input>
<input type="text" name="arr[branche][energie][öl][bp][chefs][ceo][bill gates][friends][musiker][1]" value="acdc"></input>
<input type="text" name="arr[branche][energie][öl][bp][chefs][ceo][bill gates][friends][musiker][2]" value="frank zappa"></input>
<input type="text" name="arr[branche][energie][öl][bp][chefs][ceo][bill gates][friends][musiker][3]" value="abba"></input>

<input type="text" name="arr[branche][energie][öl][bp][chefs][ceo][bill gates][friends][waltons][0]" value="sam"></input>
<input type="text" name="arr[branche][energie][öl][bp][chefs][ceo][bill gates][friends][waltons][1]" value="bruce"></input>
<input type="text" name="arr[branche][energie][öl][bp][chefs][ceo][bill gates][friends][waltons][2]" value="michael"></input>


<input type="text" name="arr[branche][energie][öl][bp][chefs][cmo]" value="jay-z"></input>
<input type="text" name="arr[branche][energie][öl][bp][chefs][cfo]" value="bruce"></input>
 
Zuletzt bearbeitet:
Sorry, hatte das ganz vergessen:

PHP:
function recurse($array, $parents=array()) {
	
	if(is_array($array)) {
		foreach($array as $var => $elem) {
	
			if(is_array($elem)) {
				recurse($elem, array_merge($parents, array($var)));
			}
			else {
				$path = (!empty($parents) ? '[' : '')
					.implode(']---[', $parents)
					.(!empty($parents) ? ']' : '').'['.$var.']';
				echo "<input type=\"text\" name=\"myinput", $path, "\" value=\"", $elem, "\">\n";
			}
		}
	}
	
}

Hab ich eben geschrieben.

Aufruf via:

PHP:
recurse($deinarray);
 
Zuletzt bearbeitet:
Moin,
danke, dass du dich der Sache angenommen hast. Unten hab ich mal die Funktion von djghost2001 (siehe hier)

PHP:
<?
//dein array
$arr['branche']['energie']['öl']['bp']['produkte'] = array("kekse", "lollis", "zigaretts", "bild");
$arr['branche']['energie']['öl']['bp']['chefs'] = array("ceo" => array("bill gates" => array("friends" => array("musiker" => array("mc hammer", "acdc", "frank zappa", "abba"), "waltons" => array("sam", "bruce", "michael")))),"cmo" => "jay-z","cfo" => "bruce");

//meine Funktion
function list_array($array,$level=1,$arrayname=""){
//jedes Element im array auslesen
foreach ($array as $v => $key) {
//wen element auch ein array ist nochmal in funktion ausführen
  if(is_array($array[$v])){
  $arrayname = $arrayname."[".$v."]";
   $level2=$level++;
   list_array($array[$v],$level2,$arrayname);
}
//wen element einen wert hat inputfeld ausgeben
else{
  echo "arr".$arrayname."[".$v."] = <input type=\"text\" name=\"arr".$arrayname."[".$v."]\" value=\"".$key."\"></input><br />";
}
}
}
//funktion mit array ausführen
list_array($arr);
?>
 
Joa ist im Prinzip das gleiche... nur dass das mit den Parents eventuell ein bissl besser gelöst ist, weil als String und nicht als Array übergeben. :D