在单个foreach中迭代多个数组

loc*_*ock 2 html php arrays foreach

我有一组这样的文本框:

<input type="text" name="tbxt[]" />
<input type="text" name="tbxt[]" />
<input type="text" name="tbxt[]" />
Run Code Online (Sandbox Code Playgroud)

我正在使用

foreach ($_POST['tbxt'] as $tbxt) {
    //
}
Run Code Online (Sandbox Code Playgroud)

但是,例如,如果我有:

<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>
Run Code Online (Sandbox Code Playgroud)

所以我可以这样写:

foreach (($_POST['tbxt'] as $tbxt) && ($_POST['selxt'] as $selxt)) {
    //
}
Run Code Online (Sandbox Code Playgroud)

这可能吗?

Mar*_*ker 8

看起来像SPL 多个迭代器的情况:

$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;
    ....
}
Run Code Online (Sandbox Code Playgroud)

虽然使用list()这里需要PHP> = 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;
    ....
}
Run Code Online (Sandbox Code Playgroud)

要么

$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;
    ....
}
Run Code Online (Sandbox Code Playgroud)