图像循环只返回一个图像,但应该全部返回

时间:2009-03-03 15:48:10

标签: php

function all_images(&$post){
$content = $post->post_content;
if(preg_match_all('/<img[^>]+src="(.*?)"[^>]*>/', $content, $results)){
    $i = 0;
    $count = count($results);
    $count = $count - 1;
    while($i < $count)
    {
        foreach($results as $result){
            echo $result[$i];
        }
        $i++;
    }
  }
}

上述循环设法从原始文本中获取所有图像。但是,它只返回一个图像。我尝试过while()和foreach()的几种不同组合,但它只返回一个图像。有谁知道我做错了什么?感谢

3 个答案:

答案 0 :(得分:4)

$ results [1]应该是第一个带括号的子模式的所有匹配的数组,所以这个简单的东西应该有用:

if(preg_match_all('/<img[^>]+src="(.*?)"[^>]*>/i', $content, $results)){
    foreach($results[1] as $src)
    {
       echo "src is $src<br>";
    }        
}

注意我已经使用/ i修饰符使匹配大小写不敏感,这可能会对你有所帮助。

您可能还想提供一些您想要匹配的示例内容。

答案 1 :(得分:1)

你为什么要做$ count = $ count - 1?

你应该能够做到这一点:

if(preg_match_all('/<img[^>]+src="(.*?)"[^>]*>/', $content, $results)){
    foreach($results[1] as $result)
    {
        echo $result;
    }
  }
}

答案 2 :(得分:1)

您必须考虑preg_match_all返回的数组的结构。所以试试这个:

function all_images(&$post)
{
    $content = $post->post_content;
    if (preg_match_all('/<img[^>]+src="(.*?)"[^>]*>/', $content, $results)) {
        // $results[0] contains the whole match of the regular expression
        foreach ($results[0] as $result) {
            echo $result;
        }
    }
}