양식 입력 배열을 PHP 배열로 가져 오는 방법


92

contact.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입니다 . 감사합니다.

도움이나 조언을 주셔서 감사합니다

답변:


146

이미 배열에 있습니다. $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";
}

감사합니다. location []과 같은 다른 입력을 추가하면 어떻게 추가 할 수 있습니까?
thom

1
기본적으로 패턴을 확장하면됩니다. 위의 편집을 참조하십시오 ... $ _POST에서 할당하면 추가 입력도 배열이됩니다 (이 필드에서했던 것처럼 html에 해당 이름을 가진 여러 입력이 있다고 가정).
Jeffrey Blake

1
Jeffrey, 배열 순서를 신뢰할 수 있는지 궁금합니다. 즉, $emails[1]이름이 $name[1]? 나는 과거에 이것으로 문제가 발생한 것 같지만 틀릴 수도 있습니다. 감사합니다
idrarig 2011

1
@bruciasse-서버가 이와 같은 입력 배열을 처리하는 방식은 웹 서버마다 다를 수 있지만 (다른 OS는 이와 같은 세밀한 세부 사항에 관해서는 다르게 구현 함), 이러한 기술을 사용한 모든 플랫폼은 내에서 일관됩니다. (즉, 순서는 매번 동일합니다). 브라우저가 요청을 서버에 전달하기 전에 요청 변수의 순서를 뒤섞을 수 있지만, 이것은 매우 드문 일이라고 생각합니다. 당신이 얼굴을 수있는 마지막 문제는 HTML의 이상한 순서와 CSS 조정에 혼합 된 것입니다
제프리 블레이크

... 포지셔닝. 페이지가 그와 같으면 배열 순서가없는 이상한 문제가 확실히 표시됩니다.
Jeffrey Blake

51

예를 들어 필드 이름을 다음과 같이 지정합니다.

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

4

지금은 조금 늦었지만 다음과 같이 할 수 있습니다.

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)

2

필드 셋의 배열이 있다면 어떨까요?

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

필드 세트의 수를 계산하기 위해 숨겨진 필드를 추가했습니다. 사용자는 필드를 추가하거나 삭제 한 다음 저장할 수 있습니다.


2

나도이 문제를 만났다. 주어진 3 개의 입력 : field [], field2 [], field3 []

이러한 각 필드에 동적으로 액세스 할 수 있습니다. 각 필드는 배열이므로 관련 필드는 모두 동일한 배열 키를 공유합니다. 예를 들어, 주어진 입력 데이터 :

  • Bob, bob@bob.com, 남성
  • Mark, mark@mark.com, 남성

Bob과 그의 이메일 및 성별은 동일한 키를 공유합니다. 이를 염두에두고 다음과 같이 for 루프의 데이터에 액세스 할 수 있습니다.

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

이것은 또한 확장됩니다. 새 필드를 추가해야 할 때마다 각 배열 변수를 추가하기 만하면됩니다.


0

그러나 VolkerK의 솔루션은 이메일과 사용자 이름 사이의 누락을 피하는 가장 좋은 방법입니다. 따라서 다음과 같이 PHP로 HTML 코드를 생성해야합니다.

<? 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 메서드를 사용하여 전송되었다고 가정합니다.


0

그럼에도 불구하고 아래 코드를 다음과 같이 사용할 수 있습니다.

$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

이것은 쉬운 일입니다.

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

-4

이 방법을 사용하면 작동합니다.

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

단계별로 답변을 설명하세요
krisdestruction 2015-04-23
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.