2013-11-25 2 views
36

등의 입력 난 내가HTML/PHP - 양식 - 배열

Array ( 
    [1] => Array ([level] => 1 [build_time] => 123) 
    [2] => Array ([level] => 2 [build_time] => 456) 
) 

같은 배열을 알고 난 같은 $ _POST 출력을하고 싶습니다 무엇이

<form> 
<input type="text" class="form-control" placeholder="Titel" name="levels[level]"> 
<input type="text" class="form-control" placeholder="Titel" name="levels[build_time]"> 

<input type="text" class="form-control" placeholder="Titel" name="levels[level]"> 
<input type="text" class="form-control" placeholder="Titel" name="levels[build_time]"> 

</form> 

같은 형태가 있어요 name = "levels [1] [build_time]"과 같은 것을 할 수 있지만,이 요소들이 동적으로 추가되기 때문에 색인을 추가하기가 어려울 것입니다. 다른 방법이 있습니까?

편집 :

제안, 나는 내 양식을 변경했습니다. 나는 또한 내가 여기에 뭔가를 놓치고 있다고 생각하기 때문에 지금 전체 HTML을 포함시켰다. 지금 내 HTML :

<div class="form-group"> 
    <label class="col-md-2">Name(z.B. 1)</label> 
    <div class="col-md-10"> 
    <input type="text" class="form-control" placeholder="Titel" name="levels[][level]"> 
    </div> 

    <label class="col-md-2">Bauzeit(In Sekunden)</label> 
    <div class="col-md-10"> 
    <input type="text" class="form-control" placeholder="Titel" name="levels[][build_time]"> 
    </div> 
</div> 

<div class="form-group"> 
    <label class="col-md-2">Name(z.B. 1)</label> 
    <div class="col-md-10"> 
    <input type="text" class="form-control" placeholder="Titel" name="levels[][level]"> 
    </div> 

    <label class="col-md-2">Bauzeit(In Sekunden)</label> 
    <div class="col-md-10"> 
    <input type="text" class="form-control" placeholder="Titel" name="levels[][build_time]"> 
    </div> 
</div> 

지금 얻을 출력은 다음과 같습니다

[levels] => Array ( 
    [0] => Array ([level] => 1) 
    [1] => Array ([build_time] => 234) 
    [2] => Array ([level] => 2) 
    [3] => Array ([build_time] => 456) 
) 

편집 2 : 편집에서 제안한 것처럼

, 내 양식을 편집에 대괄호를 이동 이름의 끝. 지금 얻은 결과는 다음과 같습니다.

[levels] => Array ( 
    [level] => Array ( 
    [0] => 1 
    [1] => 2 
) 
    [build_time] => Array ( 
    [0] => 234 
    [1] => 456 
) 
) 

나는 다소 효과가 있지만 여전히 복잡해 보입니다. 더 나은 방법이 없습니까?

답변

57

간단하게 해당 템플릿을 가지고

<input type="text" class="form-control" placeholder="Titel" name="levels[level][]"> 
<input type="text" class="form-control" placeholder="Titel" name="levels[build_time][]"> 

처럼 그 이름에 []을 추가 한 다음 당신도 루프를 사용하는을 추가 할 수 있습니다.

그런 다음 인덱스를 제공하지 않고 원하는만큼 동적으로 추가 할 수 있습니다. PHP는 예상 ​​시나리오 예제와 마찬가지로이를 선택합니다.

편집

나는 새로운 배열 요소로 모든 새로운 가치를 만드는 것이 잘못된 장소에 중괄호가 있었다 죄송합니다. 지금 업데이트 된 코드를 사용하면 다음과 같은 배열 구조가됩니다.

levels > level (Array) 
levels > build_time (Array) 

두 하위 배열 모두에서 동일한 인덱스가 쌍을 제공합니다. 예를 들어 추가

echo $levels["level"][5]; 
echo $levels["build_time"][5]; 
+0

제 편집 내용을 참조하십시오. 무엇이 잘못 되었나요? –

+0

Ooops 죄송합니다. 잘못된 곳에 내 대괄호가 있습니다. 제 새 편집과 같이 이름 끝으로 이동하십시오. –

+0

나는 너에게 너의 포스트를 다시 편집 해 본다 :) 나는 지금 동일한 구조를 얻는다. 그러나 그것은 아직도 내가 원래 원했던 것이 아니다. 그것이 최선의 방법인가요? –

4

의 경우 : 빈 POST 변수가있는 사람들을위한 이를 사용하지 마십시오 (이 예에서 이미 여기로)

name="[levels][level][]" 

오히려 이것을 사용 :

name="levels[level][]" 
15

배열 인덱스에 당신을 위해 정상이라면 당신은이 작업을 수행 할 수 있습니다

<form> 
    <input type="text" class="form-control" placeholder="Titel" name="levels[0][level]"> 
    <input type="text" class="form-control" placeholder="Titel" name="levels[0][build_time]"> 

    <input type="text" class="form-control" placeholder="Titel" name="levels[1][level]"> 
    <input type="text" class="form-control" placeholder="Titel" name="levels[1][build_time]"> 

    <input type="text" class="form-control" placeholder="Titel" name="levels[2][level]"> 
    <input type="text" class="form-control" placeholder="Titel" name="levels[2][build_time]"> 
</form> 

...

[levels] => Array ( 
    [0] => Array ( 
    [level] => 1 
    [build_time] => 2 
) 
    [1] => Array ( 
    [level] => 234 
    [build_time] => 456 
) 
    [2] => Array ( 
    [level] => 111 
    [build_time] => 222 
) 
) 

을하지만 양식의 중간에서 입력 (동적, 나는 가정) 한 쌍을 제거하면 사용자가 입력 이름을 업데이트하지 않는 한 당신은, 당신의 배열에 구멍을 얻을 것이다 ... : 그것을 달성하기 위해

5

HTML :

$array = filter_input_array(INPUT_POST); 
$newArray = array(); 
foreach (array_keys($array) as $fieldKey) { 
    foreach ($array[$fieldKey] as $key=>$value) { 
     $newArray[$key][$fieldKey] = $value; 
    } 
} 

$ newArray 당신 같은 데이터를 개최한다 : 이름을 사용 PHP는

<input name="levels[level][]"> 
<input name="levels[build_time][]"> 

로 원하는

Array ( 
    [0] => Array ([level] => 1 [build_time] => 123) 
    [1] => Array ([level] => 2 [build_time] => 456) 
) 
+2

이것이 왜 downvoted되었는지 모르겠지만, 이것이 정확히 내가 무엇을 필요로했다. – Dediqated