So erhalten Sie ein Formulareingabearray in ein PHP-Array

92

Ich habe ein Formular wie das folgende, das auf contacts.php veröffentlicht wird, und der Benutzer kann mit jquery dynamisch weitere 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 wiederhole

$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 so etwas wie den folgenden Code bringen?

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

meine Ausgabe ist also so:

Der Name ist Name1 und E-Mail ist E- Mail1 , danke
Der Name ist Name2 und E-Mail ist E- Mail2 , danke
Der Name ist Name3 und E-Mail ist E- Mail3 , danke

Vielen Dank für jede Hilfe oder Beratung

thom
quelle

Antworten:

146

Sie befinden sich bereits in Arrays: $nameist so wie es ist ein Array$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";
}
Jeffrey Blake
quelle
danke, was ist, wenn ich eine andere Eingabe wie location [] hinzugefügt habe, wie könnte ich das auch hinzufügen?
thom
1
Grundsätzlich erweitern Sie einfach das Muster. Siehe meine Bearbeitung oben ... Alle zusätzlichen Eingaben sind auch Arrays, wenn Sie sie von $ _POST zuweisen (vorausgesetzt, es gibt mehrere Eingaben mit diesem Namen im HTML, wie Sie es mit diesen Feldern getan haben).
Jeffrey Blake
1
Jeffrey, ich frage mich, ob ich der Reihenfolge der Arrays vertrauen kann. Sind wir sicher, dass dies $emails[1]dem benannten Benutzer entspricht $name[1]? Ich glaube, ich hatte in der Vergangenheit Probleme damit, aber ich könnte mich irren. Danke
idrarig
1
@bruciasse - Die Art und Weise, wie der Server Eingabearrays wie dieses verarbeitet, variiert von Webserver zu Webserver (verschiedene Betriebssysteme implementieren die Dinge unterschiedlich, wenn es um feinkörnige Details wie diese geht), jedoch ist jede Plattform, auf der ich diese Techniken eingesetzt habe, innerhalb konsistent selbst (dh die Bestellung ist jedes Mal gleich). Es ist möglich, dass ein Browser die Reihenfolge der Anforderungsvariablen verwechselt, bevor die Anforderung an den Server übergeben wird, aber ich würde erwarten, dass dies ziemlich ungewöhnlich ist. Das letzte Problem, dem Sie gegenüberstehen könnten, ist das Mischen des HTML-Codes in einer seltsamen Reihenfolge und das Anpassen des CSS
Jeffrey Blake,
... die Positionierung. Wenn Ihre Seite so wäre, würde es sicherlich einige seltsame Probleme mit der Reihenfolge der Arrays geben.
Jeffrey Blake
51

ZB 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 möglich ist, wenn Elemente über Javascript hinzugefügt werden)

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);
VolkerK
quelle
4

Ich weiß, dass es jetzt etwas spät ist, aber Sie könnten so etwas 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)
Kann O 'Spam
quelle
2

Was ist, wenn Sie eine Reihe von Feldsätzen 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 Feldsätze zu zählen. Der Benutzer kann die Felder hinzufügen oder löschen und dann speichern.

Sophia Gavish
quelle
2

Ich bin auch auf dieses Problem gestoßen. Bei 3 Eingaben: Feld [], Feld2 [], Feld3 []

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

Bob und seine E-Mail und sein Geschlecht teilen sich den gleichen Schlüssel. In diesem Sinne können Sie in einer for-Schleife wie folgt auf die Daten 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 lediglich Ihre jeweiligen Array-Variablen hinzufügen, wenn neue Felder hinzugefügt werden müssen.

thatonefreeman
quelle
0

Die Lösung von VolkerK ist jedoch die beste, um Fehlpaarungen zwischen E-Mail und Benutzername zu vermeiden. Sie müssen also HTML-Code mit PHP wie folgt generieren:

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

Ändern Sie $ total_data entsprechend Ihren Anforderungen. 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.

iroel
quelle
0

Sie können den folgenden Code jedoch wie folgt 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>';
}
Abhishek Gurjar
quelle
0

Das ist einfach:

foreach( $_POST['field'] as $num => $val ) {
      print ' '.$num.' -> '.$val.' ';
    }
Ian
quelle
-4

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/>";
}
Raphael Gates
quelle
Erklären Sie Ihre Antwort Schritt für Schritt
krisdestruction