php - saldum - hawkers pablo sánchez
combinar dos bucles foreach (3)
La solución obvia:
$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("&","&", $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;
}
}
Tengo dos bucles foreach: primero uno:
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>'';
}
2º:
foreach ($linkai as $key => $linkas) {
$i++;
$a1 = $linkas[1];
$a2 = str_replace("download/", "files/", $a1);
$a3 = str_replace("&","&", $a2);
$a4 = str_replace("amp;nbsp;","nbsp;", $a3);
echo "<div class=/"bgframe".str_replace("/i/", "/IMG/", $a4)."</div></div>";
}
La pregunta es cómo hacer que esos dos bucles muestren resultados como este:
Result1 from Loop1
Result1 from Loop2
Result2 from Loop1
Result2 from Loop2
Result3 from Loop1
Result3 from Loop2
And so on...
En lugar de:
Result1 from Loop1
Result2 from Loop1
Result3 from Loop1
...
Result1 from Loop2
Result2 from Loop2
Result3 from Loop2
Gracias
La mejor respuesta es probablemente de Jack, pero pensé que mi solución era interesante. También intenté mejorar tu código:
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/'', ''&'', '' '', ''/IMG/'');
$linkas = str_replace($characters, $replacements, $linkas);
echo "<div class=''bgframe{$linkas}''</div></div>";
next($linkai);
}
} while ($item or $linkas);
Puede usar MultipleIterator
para esto:
$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
}