Verschachteltes Array mit $i als Variablenparameter

wildthingtch

Mitglied
So ich bin wieder mal am basteln und steh mir wieder mal auf dem Schlauch.
Folgendes Problem:
Ich lasse mir Einheiten in einer for-schlaufe aufrufen, die vorhanden sind. (no prob standart)
hab bei jeder einheit 2 optionenfelder in der Auflistung, nähmlich die Anzahl der Einheit die mit der Flotte mit soll und den Einheitsname mittels Checkbox beide mit $i als index:
PHP:
<td>
<input type="text" name="anzahl-'.$i.'" size="24" />
</td>
<td>
<input type="checkbox" name="einheit-'.$i.'" value="'.$row['bezeichnung'].'" />
</td>
Ergibt logischerweisse folgendes (mögliches) Array:
Code:
Array ( [anzahl-0] => 2 [einheit-0] => F/A-22 Rapptor [anzahl-1] => 2 [einheit-1] => Patroullienboot [anzahl-2] => [anzahl-3] => [anzahl-4] => [submitButtonName] => Truppen Hinzufügen )
so weit so gut
nur sollte ich das jetzt so verwerten das ich die einzelnen einheiten mit passenden Anzahlen prüfen und dann eintragen kann.
also meine idee:
ich mach ne for mit ($i=0,$i<count($_POST),$i++)
rufe dann die einzelnen daten ab mit:
$einheit=$_POST['einheit-'.$i.''];
$anzahl=$_POST['anzahl-'.$i.''];

könnte das funktionieren
 
Moin,

das könnte funktionieren, sofern du vorher die Existenz von $_POST['einheit-'.$i.''] prüfst(das wird ja nur übermittelt, wenn die Checkbox aktiviert wird)....und nicht count($_POST) als Zähler verwendest(du hast ja schliesslich weitaus mehr Elemente in $_POST als "Einheit-Päärchen");

Ich fände das aber eher suboptimal, ein Konstrukt wie folgendes sollte dir mehr Ordnung und ein einfacheres Durchlaufen der benötigten Variablen ermöglichen:

PHP:
<input type="text"     name="einheit['.$i.'][anzahl]" size="24" />
<input type="checkbox" name="einheit['.$i.'][name]"   value="'.$row['bezeichnung'].'" />

Du kannst dann bequem $_POST['einheit'] durchlaufen, das Ergebnis würde so aussehen:
Code:
Array
(
    [einheit] => Array
        (
            [0] => Array
                (
                    [anzahl] => 2
                    [name] => F/A-22 Rapptor
                )

            [1] => Array
                (
                    [anzahl] => 2
                    [name] => Patroullienboot
                )

            [2] => Array
                (
                    [anzahl] => 
                )
            //uswusf.
        )

)

(die Existenz der Checkbox muss hier aber auch geprüft werden)
 
jetzt zweifle ich grad an meinem PHP-Verständnis!
Dank Sven sieht der Array so aus:
Code:
Array ( [einheit] =>
 Array ( [0] => Array ( [anzahl] => 2 [name] => F/A-22 Rapptor )
 [1] => Array ( [anzahl] => 2 [name] => Patroullienboot )
 [2] => Array ( [anzahl] => ) 
[3] => Array ( [anzahl] => ) 
[4] => Array ( [anzahl] => ) ) 
[submitButtonName] => Truppen Hinzufügen ) 
0
Die 0 am Ende hat folgende Bewandnis:
Code:
print_r($_POST);
$count=$_POST['einheit']['.$i.']['name'];
$num= count($count);echo $num;
for($i=0; $i<$num; $i++){
$einheit=$_POST['einheit']['.$i.']['name'];
$anzahl=$_POST['einheit']['.$i.']['anzahl'];
echo $anzahl.' '.$einheit;
Wie ihr der 0 entnehmen könnt kommt da nix an ()
wo mach ich den Denkfehler?
 
Hier mal schnell nachgebaut...(sry für den dämlichen variablen namen ;) )
Ich hoffe es hilft dir weiter

PHP:
$bla = Array ( "einheit" => Array ( "0" => Array ( "anzahl" => "2", "name" => "F/A-22 Rapptor" ),
 "1" => Array ( "anzahl" => "2", "name" => "Patroullienboot" )));


for($i = 0; $i < count($bla['einheit']); $i++){
	foreach($bla['einheit'][$i] as $v => $k){
		echo $v . " = " . $k;
		echo "<br>";
	}
}

Ergibt folgende Ausgabe

anzahl = 2
name = F/A-22 Rapptor
anzahl = 2
name = Patroullienboot

P.s. das soll weniger eine "musterlösung" als ein schubs in die richtige richtung sein.
 
Zuletzt bearbeitet:
ömm dann meinnst du soll ich das array das vom Formular kommt (in diesem fall $_POST) in ne Variable packen und dann in der for-schlaufe die daten per foreach auslesen und verarbeiten
Sorry steh grad auf dem schlauch
weil ich brauch nicht die darstellung wie von dir sondern wie in meinem skript
$einheit=F/A-22 Raptor
$anzahl=2
und dann gehts weiter mit Auslesen aus der wertetabelle (SELECT * FROM blabla WHERE bezeichnung ='$einheit'
und einschreiben in die bewegungstabelle: INSERT INTO blabla (bezeichnung, anzahl...........)VALUES ('$einheit','$anzahl'.......)
siehste mein Problem
 
Zuletzt bearbeitet:
Du kannst es machen wie du willst ohne variable würde es halt so aussehen

PHP:
for($i = 0; $i < count($_POST['einheit']); $i++){
    foreach($_POST['einheit'][$i] as $v => $k){
        echo $v . " = " . $k;
        echo "<br>";
    }
}

und wenn du (aus welchen Gründen auch immer, zumal es sich in deinem Fall eigentlich anbietet) auch auf die foreach Schleife verzichten willst würde es eben so aussehen

PHP:
for($i = 0; $i < count($_POST['einheit']); $i++){
        $anzahl = $_POST['einheit'][$i]['anzahl'];
        $name = $_POST['einheit'][$i]['name'];
   	echo $anzahl.' '.$name . '<br>';
}

Habs jetzt nicht getestet müsste aber so in etwa stimmen

Die Ausgabe wäre dann
2 F/A-22 Rapptor
2 Patroullienboot

siehste mein Problem

ehrlich gesagt: nein ;)
 
Zuletzt bearbeitet:
siehste n schubs und schon gehts.
hab den Fehler gefunden (Was so n kleiner Vergreifer beim count alles auslösen kann)
naja das mit den arrays muss ich wohl nochmal büffeln aber jetzt klappts.
Danke an alle für die Hilfe
 
Zurück