2010-07-23 44 views
69

我有一個像下面這是張貼到contacts.php的一個形式,並且用戶可以動態使用jQuery添加更多。如何獲取表單輸入數組PHP數組

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

如果我下面

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

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

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

代碼回聲出來在PHP中我會得到這樣的事情:

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

所以我的輸出是這樣的:

名稱是名1和電子郵件是 EMAIL1,謝謝
名稱是名2和電子郵件是 EMAIL2,謝謝你
名稱是 name3 and email is email3,thank you

謝謝你的任何幫助或建議

回答

117

他們已經在陣列:$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"; 
} 
+0

謝謝你,如果我加入如位置[]另一個輸入,我怎麼能添加在呢? – thom 2010-07-23 01:06:36

+1

基本上,你只是擴展模式。看到我上面的編輯...當你從$ _POST分配它們時,任何額外的輸入也將是數組(假設在html中有多個具有該名稱的輸入,就像你對這些字段所做的那樣)。 – 2010-07-23 01:12:07

+0

非常感謝,完美 – thom 2010-07-23 01:19:47

37

例如通過命名字段,如

<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); 
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方法發送的。

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> 

我添加了一個隱藏字段來計算字段集的數量。 用戶可以添加或刪除字段,然後保存。

1

我也遇到過這個問題。給定3個輸入:字段[],字段2 [],字段3 []

您可以動態訪問每個字段。由於每個字段都是數組,所以相關字段將全部共享相同的數組密鑰。例如,給定的輸入數據:

鮑勃和他的電子郵件和性別將共享相同的鍵。考慮到這一點,您可以像這樣訪問for循環中的數據:

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

這也可以縮放。所有你需要做的是添加你的相應數組變量,每當你需要添加新的字段。

-2

使用這種方法應該工作:

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

一步一步解釋你的答案 – krisdestruction 2015-04-23 22:09:21

+0

隨着更多的細節 – krisdestruction 2015-04-23 22:16:51

1

我知道它有點晚了,但你可以做一些像這樣的:

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