combine two foreach loops

前端 未结 3 2007
一生所求
一生所求 2021-02-06 16:16

I have two foreach loops: 1st one:

        foreach ($items as $key => $item) 
        {   
        $keywords = explode(\' \', $qsvarus);
        $title[$key]          


        
相关标签:
3条回答
  • 2021-02-06 16:22

    You can use the MultipleIterator for this:

    $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
    }
    
    0 讨论(0)
  • 2021-02-06 16:29

    The obvious solution:

    $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;
        }
    }
    
    0 讨论(0)
  • 2021-02-06 16:33

    The best answer is probably from Jack, but I thought my solution was interesting. I also tried to improve your code:

    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);
    
    0 讨论(0)
提交回复
热议问题