I’m having a pretty hard time describing this in the title, I’m taking suggestions.
I have a form where I have a few inputs for contact data, named contact_names[], contact_emails[] and contact_phones[]. More fields can be dynamically added if more contacts are needed. Long story short, if the user informs 3 contacts, my $_POST will contain something like this:
$_POST = [
( )
'contact_names' => ['john', 'Ed', 'Paul'],
'contact_emails' => ['john@gmail.com', 'ed@gmail.com', 'paul@gmail.com'],
'contact_phones' => ['555-5555', '333-3333', '444-4444'],
( )
];
I’d like to transform this into an array like this:
$contact_rows = [
0 => ['contact_name' => 'john', 'contact_email' => 'john@gmail.com', 'contact_phone' => '555-5555'],
1 => ['contact_name' => 'Ed', ( )],
2 => ['contact_name' => 'Paul', ( )]
];
As that will help me inserting the rows into a table with columns contact_name, contact_email and contact_phone.
I currently have an implementation taking the count of contact_names and iterating through the data with a for loop and populating $contact_rows[$i], but I’ve been wondering if there’s a more elegant way of doing this with something like array_columns().
Advertisement
Answer
This must be the 100th answer, but just create your form as:
<input type="text" name="contact[0][name]" value="1">
<input type="text" name="contact[0][email]" value="2">
<input type="text" name="contact[0][phone]" value="3">
<input type="text" name="contact[1][name]" value="4">
<input type="text" name="contact[1][email]" value="5">
<input type="text" name="contact[1][phone]" value="6">
After that – print_r($_POST)
and enjoy.