Goede avond,

Mijn vraag is hoe ik deze array het beste kan opbouwen.
Ik wil dat het nummer en de naam een soort van gekoppeld zijn zodat ik deze later met een foreach kan uitlezen en samen kan tonen

Onderstaand een voorbeeld van mijn HTML


<input name="number[]"/><input name="name[]"/>
<input name="number[]"/><input name="name[]"/>
<input name="number[]"/><input name="name[]"/>
Ik neem aan dat de 'number' leidend is.

Dan zou ik iets doen als:

<input name="item[$number][$name]"/>
Hi Ariën,


Het zijn wel altijd 2 losse inputs zeg maar, kan dat ook op een of andere manier?


Dat maakt toch niet uit?
Je wilt de data juist gegroepeerd hebben in je array-boom.
Hoeft niet eens zo ingewikkeld. Zolang je deze velden in paren toevoegt / er altijd evenveel paren zijn kun je het prima doen zoals je in je oorspronkelijke bericht voorstelt. Zolang je validatie daar maar rekening mee houdt. Je loopt door het ene array heen en controleert of de index van de ander bestaat en of de inhoud voldoet aan de regels die voor dat veld gelden.

EDIT: dit wordt mogelijk een ander verhaal als je bestaande informatie wijzigt, mogelijk is deze opgeslagen in een specifiek record (met een specifiek id), dan is het wel zaak om deze te vermelden, maar ook daar hoef je geen extra dimensie toe te voegen maar vul je gewoon een index in in de reeds aanwezige haken om het bijbehorende record bij te kunnen werken.
Als ik

Input rij 1: 10 jan
Input rij 2: 23 bert


<form action="" method="post">
	<input name="item[number]"/><input name="item[name]"/>
	<input name="item[number]"/><input name="item[name]"/>
	<input type="submit" value="send"/>
</form>	
<?php
print_r($_POST['explode']);
?>


Dan is de uitkomst

Array ( [number] => 23 [name] => bert )


Hij overruled de eerste.

Zoiets moet de uitkomst worden dat ik ze een voor een kan doorlopen?

<?php
array(
	array(
        'number' => '10',
        'name' => 'jan',
    ),
	array(
        'number' => '23',
        'name' => 'bert',
    ),
)
?>



Het kan ook zijn dat een nummer 2x voorkomt maar ze moeten wel op nummer gesorteerd worden.


<input name="item[number][]"/><input name="item[name][]"/>
<input name="item[number][]"/><input name="item[name][]"/>

Zou dan beter moeten werken.

	<input name="item[1][number]"/><input name="item[1][name]"/>
	<input name="item[2][number]"/><input name="item[2[name]"/>

Zo krijg ik ze wel in groepen :)
Aah, dat is mooi :-)
:p

Waarom niet gewoon wat je oorspronkelijk had:
<input name="number[]"><input name="name[]">
<input name="number[]"><input name="name[]">

al dan niet met specifieke indexen?

Houd het simpel.

Doorlopen kun je zoals ik al aangaf:
<?php
foreach ($_POST['number'] as $index => $numberValue) {
    // ... doe iets met $numberValue ...
    // ... en de bijbehorende name zit in $_POST['name'][$index] ...
}
?>

Veel makkelijker wordt het niet?

item[<index>][<whatever>] kan natuurlijk ook, maar dat is een stuk minder flexibel omdat je dan de hele tijd expliciet indexen moet opgeven (die je ook als teller ergens bij zult moeten houden) ingeval je straks dynamisch items wilt kunnen toevoegen en verwijderen? Dan moet je de hele tijd zitten te klooien met het expliciet instellen van indexen. En je kunt er dan ook niet vanuit gaan dat dit een "sluitende rij" is, want wat als je item 1 t/m 5 hebt, en dan index 3 er tussenuit kiepert? Dan is het toevoegen van een groep velden als number[], name[] of whatever[] toch een stuk makkelijker, en de juiste index en de velden die dan tezamen een item vormen zoek je bij de verwerking wel bij elkaar.

Reageren