как использовать несколько preg_match с одним циклом foreach - PullRequest
0 голосов
/ 16 марта 2011

У меня есть несколько выражений preg match, и я пытаюсь использовать каждое из них для вывода чего-то другого.Я знаю, как использовать foreach для вывода по одному.но как мне отразить или задать им переменную?

preg_match_all("/\<div class=\"merchant_info\">\s*(\<div.*?\<\/div>\s*)?(.*?)\<\/div\>/is", $res[0], $matches );

   foreach($matches[0] as $titles)
{
    echo "<div class='titles' >".$titles."</div>";
}

preg_match_all("/\<a class=\"thumb\"(.*?)\<\/a\>/is", $res[0], $matches);

   foreach($matches[0] as $thumbs)
{
    echo "<div class='thumbs' >".$thumbs."</div>";
}

Я хочу иметь возможность отображать заголовки и превью вместе.или если я могу установить их как переменную, а затем вывести ее в другом месте?

Спасибо

Ответы [ 3 ]

2 голосов
/ 16 марта 2011

Попробуйте,

$title = array();
$thumb = array();

$string = '';

preg_match_all("/\<div class=\"merchant_info\">\s*(\<div.*?\<\/div>\s*)?(.*?)\<\/div\>/is", $res[0], $matches );
foreach($matches[0] as $titles){

    $title[] = "<div class='titles' >".$titles."</div>";

}
preg_match_all("/\<a class=\"thumb\"(.*?)\<\/a\>/is", $res[0], $matches);
foreach($matches[0] as $thumbs){

    $thumb[] = "<div class='thumbs' >".$thumbs."</div>";

}
for($i = 0; $i < count($title); $i++){

    $string .= $title[$i] . $thumb[$i];

}

echo $string;
2 голосов
/ 16 марта 2011

Если список совпадений совпадает, вы можете просто скомбинировать его следующим образом:

preg_match_all("/\<div class=\"merchant_info\">\s*(\<div.*?\<\/div>\s*)?(.*?)\<\/div\>/is", $res[0], $matches );
preg_match_all("/\<a class=\"thumb\"(.*?)\<\/a\>/is", $res[0], $second);

foreach($matches[0] as $i => $titles)
{
    echo "<div class='titles' >".$titles."</div>";
    echo "<div class='thumbs' >".$second[$i]."</div>";
}

Обратите внимание, как вторая preg_match_all использует переменную результата $second. $i является числовым индексом первого $matches массива, но используется как есть для $ second.

Btw. Я за использование регулярных выражений. Но, учитывая сложность соответствия, это может быть одним из случаев, когда ваш код может выиграть от использования HTML-анализатора. phpQuery или QueryPath значительно упрощают извлечение содержимого и гарантируют, что заголовки действительно принадлежат миниатюрам.

1 голос
/ 16 марта 2011
preg_match_all("/\<div class=\"merchant_info\">\s*(\<div.*?\<\/div>\s*)?(.*?)\<\/div\>/is", $res[0], $matches[] );
preg_match_all("/\<a class=\"thumb\"(.*?)\<\/a\>/is", $res[0],  $matches[]);

foreach($matches[0][0] as $i => $titles)
{
    echo "<div class='titles' >".$titles."</div>";
    echo "<div class='thumbs' >". $matches[1][0][$i]."</div>";
}
...