2009-11-24 70 views
2

我希望將表單數據以特定格式作爲數組排序在服務器上。目前,我有可能在我的標記出現無數次下面的表單元素:在PHP中使用HTML表單構建n維數組

... 
<tr> 
    <td><p>Friend's Name:</p></td> 
    <td><p><input type="text" name="friends[name][]" /></p></td> 
    <td><p>Friend's Email:</p></td> 
    <td><p><input type="text" name="friends[email][]" /></p></td> 
    <td><p><input type="button" value="+" class="addOne" /></td> 
</tr> 
... 

提交時,結果顯示如下:

[friends] => Array 
    (
    [name] => Array 
    (
     [0] => John Doe 
     [1] => Jane Doe 
    ) 
    [email] => Array 
    (
     [0] => [email protected] 
     [1] => [email protected] 
    ) 
) 

我可以用這個陣就好了,但我很好奇,如果有可能具有相同的數據顯示在下面的數組實例的形式:

[friends] => Array 
    (
    [0] => Array 
    (
     [name] => John Doe 
     [email] => [email protected] 
    ) 
    [1] => Array 
    (
     [name] => Jane Doe 
     [email] => [email protected] 
    ) 
) 

我明白,我可以使用具有特定索引名的AChEI已經這一點,就像這樣:

friends[0][name]friends[0][email]

不過我很好奇,如果我能達到同樣的效果,而無需編寫動態的表單元素的新名稱。

回答

3

我首先想到的是使用name="friends[][name]"代替name="friends[name][]"
於是,我很快就意識到,指數也將被遞增,給了friends[0][name]friends[1][email]

我想,唯一可行的解​​決方案,我能想到的是操縱POST數據和你一樣希望他們重新排列,這樣的:

$newFriends=array(); 
foreach($_POST["friends"] as $k1 => $v1){ 
    foreach($v1 as $k2 => $v2){ 
    $newFriends[$k2][$k1]=$v; 
    } 
} 

$newFriends應具備的結構,你正在尋找

當然,您需要根據需要添加isset()和is_array()檢查...並且要注意,如果數據未按照您所使用的順序進行POST-ed,某些值可能會被覆蓋期待...

+0

這是我想到的唯一解決方案。也就是說,或者動態地用javascript重寫字段名稱,但是在沒有javascript的情況下會崩潰。謝謝你的關注,雖然:) – Sampson 2009-11-24 21:30:35