2008-12-20 160 views
4

我有以下代碼:

 <tr> 
     <td width="60%"><dl> 
      <dt>Full Name</dt> 
      <dd> 
      <input name="fullname[]" type="text" class="txt w90" id="fullname[]" value="<?php echo $value; ?>" /> 
      </dd> 
     </dl></td> 
     <td width="30%"><dl> 
      <dt>Job Title</dt> 
      <dd> 
      <input name="job_title[]" type="text" class="txt w90" id="job_title[]" value="<?php echo $value2; ?>" /> 
      </dd> 
     </dl></td></tr> 

讓我們假設我有上面的代碼的幾行。我如何迭代並獲得數組$_POST['fullname']$_POST['job_title']的值?

回答

10

這只是一個數組:

foreach ($_POST['fullname'] as $name) { 
    echo $name."\n"; 
} 

如果問題是要遍歷並行的兩個數組超過單純使用其中一個獲得指標:

for ($i=0; $i < count($_POST['fullname']); $i++) { 
    echo $_POST['fullname'][$i]."\n"; 
    echo $_POST['job_title'][$i]."\n"; 
} 
+0

它在這裏的手工http://us.php.net/manual/en/faq.html.php#faq.html.arrays – OIS 2008-12-20 08:47:54

3

我刪除了這早些時候,因爲它接近溫科的答案。

for ($i = 0, $t = count($_POST['fullname']); $i < $t; $i++) { 
    $fullname = $_POST['fullname'][$i]; 
    $job_title = $_POST['job_title'][$i]; 
    echo "$fullname $job_title \n"; 
} 

隨着原始索引從0不數值 - N-1

$range = array_keys($_POST['fullname']); 
foreach ($range as $key) { 
    $fullname = $_POST['fullname'][$key]; 
    $job_title = $_POST['job_title'][$key]; 
    echo "$fullname $job_title \n"; 
} 

這只是用於一般的信息。使用SPL DualIterator,您可以製作如下所示的產品:

$dualIt = new DualIterator(new ArrayIterator($_POST['fullname']), new ArrayIterator($_POST['job_title'])); 

while($dualIt->valid()) { 
    list($fullname, $job_title) = $dualIt->current(); 
    echo "$fullname $job_title \n"; 
    $dualIt->next(); 
} 
+0

而且會是什麼DualIterator的好處是什麼? – 2008-12-20 10:32:16

+0

它與SPL中的所有其他迭代器類似,因此對於那些使用它熟悉的迭代器的人來說。它也類似於那些用於Java我猜。但我認爲他們至少應該使用MultiIterator而不是有限的DualIterator。 – OIS 2008-12-20 18:19:32

0

Vinko和OIS的答案都非常好(我上傳了OIS)。但是,如果你總是打印文本字段的5個人副本,你可以永遠只是命名每個領域具體包括:

<?php $i=0; while($i < 5) { ?><tr> 
    ... 
    <input name="fullname[<?php echo $i; ?>]" type="text" class="txt w90" id="fullname[<?php echo $i; ?>]" value="<?php echo $value; ?>" /> 
+0

這將產生與未命名它們相同的結果。 – OIS 2008-12-20 09:42:53

1

我認爲你正在試圖解決的問題,是從$ _ POST得到的一對值['fullname'] []和$ _POST ['jobtitle'] []具有相同的索引。

for ($i = 0, $rowcount = count($_POST['fullname']); $i < $rowcount; $i++) 
{ 
    $name = $_POST['fullname'][$i]; // get name 
    $job = $_POST['jobtitle'][$i]; // get jobtitle 
} 
1

如果我正確地理解你,你有2個數組,你基本上希望並行迭代。

像下面這樣的東西可能適合你。您可以使用$_POST['fullname']$_POST['jobtitle']而不是$a1$a2

<?php 
$a1=array('a','b','c','d','e','f'); 
$a2=array('1','2','3','4','5','6'); 

// reset array pointers  
reset($a1); reset($a2); 
while (TRUE) 
{ 
    // get current item 
    $item1=current($a1); 
    $item2=current($a2); 
    // break if we have reached the end of both arrays 
    if ($item1===FALSE and $item2===FALSE) break; 
    print $item1.' '. $item2.PHP_EOL; 
    // move to the next items 
    next($a1); next($a2); 
}