2012-06-12 4 views
2

나는 사람의 이름과 성을 포함하는 양식을 가지고 있습니다. 사용자는 JS를 통해 새로운 입력 필드를 만드는 링크를 사용하여 여러 사람을 추가 할 수 있습니다. 2 명을 포함하는 양식의 예는 다음과 같습니다.PHP : 폼 데이터에서 다차원 배열 조작?

<form action="" method="post"> 
    <input type="text" class="required" name="people[first][]" /> 
    <input type="text" class="required" name="people[last][]" /> 

    <input type="text" class="required" name="people[first][]" /> 
    <input type="text" class="required" name="people[last][]" /> 

    <input type="submit" name="submit"> 
</form> 

이 데이터를 데이터베이스에 삽입하는 방법을 찾으려합니다. 나는 사용하여 시도했다 :

foreach ($_POST['people'] as $person) { 
    foreach ($person as $value) { 
    echo $value . '<br/>'; 
    } 
} 

.. 그룹에 1
이름이
성 1
성 2

내가 노력하고있어

이름 결과 결과는 어쨌든 각각 first name x + last name x 조합에 대해 새 행을 삽입 할 수 있습니다. 이런

+1

왜 'people [0] [first]'와 같이 'people' 값을 설정하지 않습니까? 각 배열 요소는 한 행에 해당합니다. –

답변

1

$_POST['people']['first'] 먼저 이름의 배열이다.
$_POST['people']['last']은 성의 배열입니다.

이 같은 배열의 배열로 병합 할 수 있습니다 $people의 결과 배열은 연관 배열의 배열이 될 것입니다

$people = $_POST['people']; 
$length = count($people['first']); 
for($i = 0; $i < $length; $i++) 
    $temp[] = array('first' => $people['first'][$i], 'last' => $people['last'][$i]); 
$people = $temp; 

과 같을 수 있습니다 인

Array 
(
    [0] => Array 
     (
      [first] => Jim 
      [last] => Smith 
     ) 

    [1] => Array 
     (
      [first] => Jenny 
      [last] => Johnson 
     ) 

) 

bsdnoobz처럼 HTML을 수정하면 얻을 수있는 배열과 동일합니다. 그것을 반복하는 것은 역시 동일합니다 :

foreach ($people as $person) { 
    echo $person['first'] . ' ' . $person['last'] . '<br />'; 
} 
+0

그래, 근데 너 왜 그래? –

+0

@JeremyHolovacs이 방법을 사용하면 함께 분류 된 각 사람에 대한 정보를 얻을 수 있습니다. bsdnoobz가 만든 배열을 정확하게 빌드하지만 OP에 더 적합한 HTML을 수정할 필요가 없습니다. – Paulpro

+0

필드 중 하나가 비어 있으면 어떻게 될지 궁금합니다. 동시성을 망칠까요? 이것은 나쁜 디자인에 대한 어색한 해결 방법을 만드는 것으로 보인다. –

4

작성 입력 요소 :하여 PHP에서

<input type="text" name="people[0][first]" /> 
<input type="text" name="people[0][last]" /> 
<input type="text" name="people[1][first]" /> 
<input type="text" name="people[1][last]" /> 

:

foreach ($_POST['people'] as $person) { 
    echo $person['first'].' '.$person['last'].'<br />'; 
}