Cómo convertir una matriz de entrada de formulario en una matriz PHP
Tengo un formulario como el siguiente que está publicado en contacts.php y el usuario puede agregar más dinámicamente con jQuery .
<input type="text" name="name[]" />
<input type="text" name="email[]" />
<input type="text" name="name[]" />
<input type="text" name="email[]" />
<input type="text" name="name[]" />
<input type="text" name="email[]" />
Si los hago eco en PHP con el siguiente código,
$name = $_POST['name'];
$email = $_POST['account'];
foreach($name as $v) {
print $v;
}
foreach($email as $v) {
print $v;
}
Obtendré algo como esto:
nombre1nombre2nombre3correo electrónico1correo electrónico2correo electrónico3
¿Cómo puedo convertir esas matrices en algo como el siguiente código?
function show_Names($n, $m)
{
return("The name is $n and email is $m, thank you");
}
$a = array("name1", "name2", "name3");
$b = array("email1", "email2", "email3");
$c = array_map("show_Names", $a, $b);
print_r($c);
entonces mi salida es así:
El nombre es nombre1 y el correo electrónico es correo electrónico1 , gracias El nombre es nombre2 y el correo electrónico es correo electrónico2 , gracias El nombre es nombre3 y el correo electrónico es correo electrónico3 , gracias
Ya están en matrices: $name
es una matriz, tal cual$email
Entonces todo lo que necesitas hacer es agregar un poco de procesamiento para atacar ambos arreglos:
$name = $_POST['name'];
$email = $_POST['account'];
foreach( $name as $key => $n ) {
print "The name is " . $n . " and email is " . $email[$key] . ", thank you\n";
}
Para manejar más entradas, simplemente extienda el patrón:
$name = $_POST['name'];
$email = $_POST['account'];
$location = $_POST['location'];
foreach( $name as $key => $n ) {
print "The name is " . $n . ", email is " . $email[$key] .
", and location is " . $location[$key] . ". Thank you\n";
}
Por ejemplo, nombrando los campos como
<input type="text" name="item[0][name]" />
<input type="text" name="item[0][email]" />
<input type="text" name="item[1][name]" />
<input type="text" name="item[1][email]" />
<input type="text" name="item[2][name]" />
<input type="text" name="item[2][email]" />
(lo cual también es posible al agregar elementos mediante JavaScript)
El script PHP correspondiente podría verse así
function show_Names($e)
{
return "The name is $e[name] and email is $e[email], thank you";
}
$c = array_map("show_Names", $_POST['item']);
print_r($c);
Podrías hacer algo como esto:
function AddToArray ($post_information) {
//Create the return array
$return = array();
//Iterate through the array passed
foreach ($post_information as $key => $value) {
//Append the key and value to the array, e.g.
//$_POST['keys'] = "values" would be in the array as "keys"=>"values"
$return[$key] = $value;
}
//Return the created array
return $return;
}
La prueba con:
if (isset($_POST['submit'])) {
var_dump(AddToArray($_POST));
}
Esto para mí produjo:
array (size=1)
0 =>
array (size=5)
'stake' => string '0' (length=1)
'odds' => string '' (length=0)
'ew' => string 'false' (length=5)
'ew_deduction' => string '' (length=0)
'submit' => string 'Open' (length=4)