在单个foreach中迭代多个数组

时间:2014-08-09 12:42:33

标签: php html arrays foreach

我有一组这样的文本框:

<input type="text" name="tbxt[]" />
<input type="text" name="tbxt[]" />
<input type="text" name="tbxt[]" />

我正在使用

foreach ($_POST['tbxt'] as $tbxt) {
    //
}

但是,例如,如果我有:

<input type="text" name="tbxt[]" /><select name="selxt[]"></select>
<input type="text" name="tbxt[]" /><select name="selxt[]"></select>
<input type="text" name="tbxt[]" /><select name="selxt[]"></select>

我可以写这样的东西:

foreach (($_POST['tbxt'] as $tbxt) && ($_POST['selxt'] as $selxt)) {
    //
}

这可能吗?

2 个答案:

答案 0 :(得分:8)

看起来像SPL Multiple iterators

的情况
$mi = new MultipleIterator();
$mi->attachIterator(new ArrayIterator($_POST['tbxt']));
$mi->attachIterator(new ArrayIterator($_POST['selxt']));
foreach($mi as list($tbxt, $selxt)) {
    echo $tbxt, ' ', $selxt, PHP_EOL;
    ....
}

虽然这里使用list()需要PHP&gt; = 5.5.0

您可以通过为每个迭代器分配一个名称,然后在循环中提取来在早期版本中模拟它:

$mi = new MultipleIterator();
$mi->attachIterator(new ArrayIterator($_POST['tbxt']), 'tbxt');
$mi->attachIterator(new ArrayIterator($_POST['selxt']), 'selxt');
foreach($mi as $lists) {
    extract($lists);
    echo $tbxt, ' ', $selxt, PHP_EOL;
    ....
}

$mi = new MultipleIterator();
$mi->attachIterator(new ArrayIterator($_POST['tbxt']), 'tbxt');
$mi->attachIterator(new ArrayIterator($_POST['selxt']), 'selxt');
foreach($mi as $lists) {
    echo $lists['tbxt'], ' ', $lists['selxt'], PHP_EOL;
    ....
}

答案 1 :(得分:1)

如果您愿意使用for代替foreach,则可以执行以下操作:

$tbxt = $_POST['tbxt'];
$selxt = $_POST['selxt']

for ($i=0; $i<sizeof($tbxt); $i++) {
    //access them using $tbxt[$i] and $selxt[$i]
}