Как сделать форму ввода массива в массив PHP


у меня есть форма, подобная приведенной ниже, которая размещена в контактах.php, и пользователь может динамически добавлять больше с помощью 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[]" />

Если я эхо их в php с кодом ниже

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

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

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

Я вам что-то вроде этого:

name1name2name3email1email2email3

как я могу получить эти массивы в нечто вроде кода ниже

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

Так что мой вывод такой:

В зовут name1 и электронной почты email1, спасибо
Это имя name2 и электронной почты email2, спасибо
Это имя name3 и электронной почты email3, спасибо

спасибо за любую помощь или советы

8 79

8 ответов:

они уже в массивах:$name - это массив, как $email

так что все, что вам нужно сделать, это добавить немного обработки для атаки обоих массивов:

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

foreach( $name as $key => $n ) {
  print "The name is ".$n." and email is ".$email[$key].", thank you\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";
}

например, называя поля как

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

(что также возможно при добавлении элементов через javascript)

соответствующий PHP-скрипт может выглядеть как

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

Что делать, если у вас есть массив наборов полей?

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

Я добавил скрытое поле для подсчета количества наборов полей. Пользователь может добавить или удалить поля, а затем сохранить его.

Я знаю, что это немного поздно, но вы могли бы сделать что-то типа этого:

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

тест:

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

Это для меня производство:

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)

Я тоже столкнулся с этой проблемой. Дано 3 входа: field [], field2 [], field3 []

вы можете получить доступ к каждому из этих полей динамически. Поскольку каждое поле будет массивом, все связанные поля будут иметь один и тот же ключ массива. Например, заданные входные данные:

  • Боб, bob@bob.com-мужчина
  • Марк, mark@mark.com-мужчина

Боб и его электронная почта и секс будут иметь один и тот же ключ. Имея это в виду, вы можете получить доступ к данным для цикл такой:

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

Это весы. Все, что вам нужно сделать, это добавить свой соответствующий массив vars всякий раз, когда вам нужно добавить новые поля.

тем не менее, решение VolkerK является лучшим, чтобы избежать пропустить пару между электронной почтой и именем пользователя. Таким образом, вы должны генерировать HTML-код с PHP следующим образом:

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

изменить $total_data в соответствии с вашими потребностями. Чтобы показать это, просто так:

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

предполагая, что данные были отправлены с помощью метода POST.

тем не менее, вы можете использовать ниже код,

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

использование этого метода должно работать:

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