Cómo convertir una matriz de entrada de formulario en una matriz PHP

Resuelto thom asked hace 54 años • 9 respuestas

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

thom avatar Jan 01 '70 08:01 thom
Aceptado

Ya están en matrices: $namees 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";
}
Jeffrey Blake avatar Jul 23 '2010 00:07 Jeffrey Blake

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);
VolkerK avatar Jul 23 '2010 00:07 VolkerK

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)
Can O' Spam avatar Jul 10 '2015 14:07 Can O' Spam