2010-07-23 19 views
69

Tengo un formulario como el que se muestra a continuación en contacts.php, y el usuario puede agregar dinámicamente más con jquery.Cómo obtener una matriz de entrada de formulario en la matriz de PHP

<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 les echo en PHP con el código de abajo

$name = $_POST['name']; 
$email = $_POST['account']; 

foreach($name as $v) { 
print $v; 
} 

foreach($email as $v) { 
print $v; 
} 

voy a tener algo como esto:

name1name2name3email1email2email3

cómo puedo obtener los matrices en algo así como el código a continuación

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); 

así que mi salida es la siguiente:

El nombre es nombre1 y el correo electrónico es email1, gracias
El nombre es nombre2 y el correo electrónico es email2, gracias usted
El nombre es name3 y el correo electrónico es email3, gracias

gracias por cualquier ayuda o consejo

Respuesta

117

Ya están en matrices: $name es una array, como es $email

Así que todo lo que necesita hacer es agregar un poco de procesamiento para atacar ambas matrices:

$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 extender 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"; 
} 
+0

gracias, ¿y si he añadido otra entrada como la ubicación [], ¿cómo podría añadir que en así? – thom

+1

Básicamente, solo extiendes el patrón. Ver mi edición anterior ... cualquier entrada adicional también será una matriz cuando la asigne desde $ _POST (suponiendo que hay múltiples entradas con ese nombre en el html, como lo hizo con estos campos). –

+0

muchas gracias, perfecto – thom

37

P. ej 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]" /> 

(que también es posible cuando la adición de elementos a través de JavaScript)

El script php correspondiente podría ser similar

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); 
0

Sin embargo, la solución de VolkerK es la mejor pareja para evitar la falta entre el correo electrónico y nombre de usuario. Por lo tanto, debe generar código HTML con PHP de esta manera:

<? foreach ($i = 0; $i < $total_data; $i++) : ?> 
    <input type="text" name="name[<?= $i ?>]" /> 
    <input type="text" name="email[<?= $i ?>]" /> 
<? endforeach; ?> 

Cambie $ total_data para satisfacer sus necesidades. Para mostrarlo, así:

$output = array_map(create_function('$name, $email', 'return "The name is $name and email is $email, thank you.";'), $_POST['name'], $_POST['email']); 
echo implode('<br>', $output); 

Suponiendo que los datos se enviaron mediante el método POST.

2

¿Qué sucede si tienes una serie de conjuntos de campos?

<fieldset> 
<input type="text" name="item[1]" /> 
<input type="text" name="item[2]" /> 
<input type="hidden" name="fset[]"/> 
</fieldset> 

<fieldset> 
<input type="text" name="item[3]" /> 
<input type="text" name="item[4]" /> 
<input type="hidden" name="fset[]"/> 
</fieldset> 

He añadido un campo oculto para contar el número de conjuntos de campo. El usuario puede agregar o eliminar los campos y luego guardarlos.

1

Encontré este problema también. Dadas 3 entradas: campo [], campo2 [], campo3 []

Puede acceder a cada uno de estos campos dinámicamente. Como cada campo será una matriz, los campos relacionados compartirán la misma clave de matriz. Por ejemplo, los datos de entrada dada:

Bob y su correo electrónico y el sexo compartirán la misma llave. Con esto en mente, se puede acceder a los datos en un bucle como este:

for($x = 0; $x < count($first_name); $x++) 
    { 
     echo $first_name[$x]; 
     echo $email[$x]; 
     echo $sex[$x]; 
     echo "<br/>"; 
    } 

Esta escalas también. Todo lo que necesita hacer es agregar sus respectivos vars de matriz cada vez que necesite agregar nuevos campos.

-2

uso de este método debería funcionar:

$name = $_POST['name']; 
$email = $_POST['account']; 
while($explore=each($email)) { 
    echo $explore['key']; 
    echo "-"; 
    echo $explore['value']; 
    echo "<br/>"; 
} 
+0

Explica tu respuesta paso a paso – krisdestruction

+0

con más detalles – krisdestruction

1

Sé que es un poco tarde, pero se puede 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) 
0

No obstante, se puede utilizar a continuación como código,

$a = array('name1','name2','name3'); 
$b = array('email1','email2','email3'); 

function f($a,$b){ 
    return "The name is $a and email is $b, thank you"; 
} 

$c = array_map('f', $a, $b); 

//echoing the result 

foreach ($c as $val) { 
    echo $val.'<br>'; 
} 
Cuestiones relacionadas