2008-12-20 159 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); 
}