Frage Wie man ein Formulareingabefeld in ein PHP-Array bekommt


Ich habe ein Formular wie das folgende, das in contacts.php gepostet wird, und der Benutzer kann dynamisch mehr mit jquery hinzufügen.

<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[]" />

Wenn ich sie in PHP mit dem Code unten ausspreche

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

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

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

Ich werde so etwas bekommen:

name1name2name3email1email2email3

Wie kann ich diese Arrays in etwas wie den Code unten bekommen

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

also ist meine Ausgabe wie folgt:

Der Name ist Name1 und E-Mail ist E-Mail1, Danke
  Der Name ist Name2 und E-Mail ist email2, Danke
  Der Name ist name3 und E-Mail ist email3, Danke

Vielen Dank für Ihre Hilfe oder Ihren Rat


76
2017-07-23 00:35


Ursprung


Antworten:


Sie sind bereits in Arrays: $name ist ein Array, wie es ist $email

Alles, was Sie tun müssen, ist ein wenig Verarbeitung hinzuzufügen, um beide Arrays anzugreifen:

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

foreach( $name as $key => $n ) {
  print "The name is ".$n." and email is ".$email[$key].", thank you\n";
}

Um mehr Eingaben zu verarbeiten, erweitern Sie einfach das Muster:

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

120
2017-07-23 00:39



Z.B. durch Benennen der Felder wie

<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]" />

(was auch beim Hinzufügen von Elementen via Javascript möglich ist)

Das entsprechende PHP-Skript könnte so aussehen

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

38
2017-07-23 00:38



Was ist, wenn Sie eine Reihe von Fieldsets haben?

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

Ich habe ein verstecktes Feld hinzugefügt, um die Anzahl der Feldgruppen zu zählen. Der Benutzer kann die Felder hinzufügen oder löschen und dann speichern.


2
2017-07-25 16:06



Ich weiß es jetzt ein bisschen spät, aber Sie könnten etwas wie das tun:

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

Der Test mit:

if (isset($_POST['submit'])) {
    var_dump(AddToArray($_POST));
}

Dies für mich produziert:

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)

2
2017-07-10 14:30



Ich bin auch auf dieses Problem gestoßen. Bei 3 Eingaben: field [], field2 [], field3 []

Sie können auf jedes dieser Felder dynamisch zugreifen. Da jedes Feld ein Array ist, haben alle verwandten Felder denselben Array-Schlüssel. Zum Beispiel, gegebene Eingabedaten:

  • Bob, Bob@bob.com, männlich
  • Mark, mark@mark.com, männlich

Bob und seine E-Mail und sein Sex teilen den gleichen Schlüssel. In diesem Sinne können Sie auf die Daten in einer for-Schleife wie folgt zugreifen:

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

Dies skaliert auch. Sie müssen nur die entsprechenden Array-Variablen hinzufügen, wenn Sie neue Felder hinzufügen möchten.


1
2018-01-07 13:43



Die Lösung von VolkerK ist jedoch die beste Lösung, um die Verbindung zwischen E-Mail und Benutzername zu vermeiden. Also muss man HTML-Code mit PHP so erzeugen:

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

Ändern Sie $ total_data nach Ihren Bedürfnissen. Um es zu zeigen, einfach so:

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

Angenommen, die Daten wurden mit der POST-Methode gesendet.


0
2017-07-23 06:30



Trotzdem können Sie den folgenden Code verwenden,

$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>';
}

0
2018-04-13 10:33



Die Verwendung dieser Methode sollte funktionieren:

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

-2
2018-04-23 21:50