4

我有两个 foreach 循环:第一个:

        foreach ($items as $key => $item) 
        {   
        $keywords = explode(' ', $qsvarus);
        $title[$key] = preg_replace('/\b('.implode('|', $keywords).')\b(?![^<]*[>])/i', '<b>$0</b>', $title[$key]);
        $infoo[$key] = preg_replace('/\b('.implode('|', $keywords).')\b(?![^<]*[>])/i', '<b>$0</b>', $infoo[$key]);
        echo '<tr><td>'.$title[$key].$infoo[$key].$item.'</tr></td>';
}

第二个:

foreach ($linkai as $key => $linkas) {
    $i++;
    $a1 = $linkas[1];
$a2 = str_replace("download/", "files/", $a1);
$a3 = str_replace("&","&amp;", $a2);
$a4 = str_replace("amp;nbsp;","nbsp;", $a3);
echo "<div class=\"bgframe".str_replace("/i/", "/IMG/", $a4)."</div></div>";
}

问题是如何使这两个循环显示如下结果:

Result1 from Loop1
Result1 from Loop2
Result2 from Loop1
Result2 from Loop2
Result3 from Loop1
Result3 from Loop2
And so on...

代替:

Result1 from Loop1
Result2 from Loop1
Result3 from Loop1
...
Result1 from Loop2
Result2 from Loop2
Result3 from Loop2

谢谢

4

3 回答 3

4

你可以使用MultipleIterator这个:

$m = new MultipleIterator();
$m->attachIterator(new ArrayIterator($items), 'item');
$m->attachIterator(new ArrayIterator($linkai), 'linkas');

foreach ($m as $unit) {
    // $unit['item'] contains an entry from $items
    // $unit['linkas'] contains an entry from $linkai

    // your logic here
}
于 2012-12-27T00:06:19.033 回答
2

显而易见的解决方案:

$output1 = array();
$output2 = array();

foreach ($items as $key => $item) 
{   
    $keywords = explode(' ', $qsvarus);
    $title[$key] = preg_replace('/\b('.implode('|', $keywords).')\b(?![^<]*[>])/i', '<b>$0</b>', $title[$key]);
    $infoo[$key] = preg_replace('/\b('.implode('|', $keywords).')\b(?![^<]*[>])/i', '<b>$0</b>', $infoo[$key]);
    $output1[] = '<tr><td>'.$title[$key].$infoo[$key].$item.'</tr></td>';
}

foreach ($linkai as $key => $linkas) {
    $i++;
    $a1 = $linkas[1];
    $a2 = str_replace("download/", "files/", $a1);
    $a3 = str_replace("&","&amp;", $a2);
    $a4 = str_replace("amp;nbsp;","nbsp;", $a3);
    $output2[] = "<div class=\"bgframe".str_replace("/i/", "/IMG/", $a4)."</div></div>";
}

$output = array_map( null, $output1, $output2 );
foreach ( $output as $lines ) {
    $lines = array_filter( $lines );
    foreach ( $lines as $line ) {
        echo $line;
    }
}
于 2012-12-26T23:59:49.520 回答
0

最好的答案可能来自 Jack,但我认为我的解决方案很有趣。我还尝试改进您的代码:

do {
    if ($item = current($items)) {
        $key = key($items);
        $keywords = str_replace(' ', '|');
        list($infoo_str, $title_str) = preg_replace(
            "/\b({$keywords})\b(?![^<]*[>])/i",
            '<b>$0</b>',
            array($infoo[$key], $title[$key])
        );

        echo "<tr><td>{$infoo_str}{$title_str}{$item}</tr></td>";

        next($items);
    }

    if ($linkas = current($linkai)) {
        $characters = array('download/', '&', 'amp;nbsp;', '/i/');
        $replacements = array('files/', '&amp;', '&nbsp;', '/IMG/');
        $linkas = str_replace($characters, $replacements, $linkas);

        echo "<div class='bgframe{$linkas}'</div></div>";

        next($linkai);
    }
} while ($item or $linkas);
于 2012-12-27T01:50:34.477 回答