2009-03-03 20 views
0
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()的组合,但它只返回一个图像。有谁知道我做错了什么?由于图像循环仅返回一个图像,但应全部返回

+0

是$结果应该是一个数组数组? – 2009-03-03 16:00:16

回答

4

$结果[1]应该是第一个括号中的子模式的所有比赛的数组,所以这样简单的东西应该工作:

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

注意,我用了/我修饰符使匹配情况不敏感,这可能会帮助你。

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

+0

谢谢兄弟!工作出色。 – Drew 2009-03-03 16:04:21

1

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

你应该能够只是这样做:

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