2012-07-04 81 views
3

我有一个包含赞助商标识的文件夹。在我的网站上,用户可以属于赞助商和sponsor_id设置会话当用户登录PHP glob()正则表达式

这里是我的代码:

function sponsor_logos($sponsor_id) { 
    $logos = glob("resources/content/sites/{$sponsor_id}*"); 

    foreach($logos as $logo) { 
     if(file_exists("{$logo}")) 
      echo "<img src='/{$logo}' />"; 
    } 
} 

上述工作,但赞助商可以有多个徽标。因此,多个徽标保存像这样:sponsor_id.jpg,sponsor_id_2.jpg,sponsor_id_3.jpg

我不是在正则表达式最强,所以任何帮助,非常感谢!谢谢!

+1

你说它有效,那么问题是什么? '*'应该全部抓住 – jurgemaister

+0

'glob()'不使用正则表达式。 –

+0

@jurgemaister - 问题是,如果我通过赞助商标识号为1,上面它会捕获名为10.jpg,11.jpg,12.jpg等的赞助商徽标。 – dennismonsewicz

回答

1

你最好打开目录,并检查所有文件(如果没有那么多的文件)。你可以这样做:

function sponsor_logos($sponsor_id) { 
    if ($dh = opendir('resources/content/sites/')) { 
     while (($file = readdir($dh)) !== false) { 
      if(strpos($file, $sponsor_id . '.') === 0) { 
       $sponsor_files[] = $file; 
      } 
      else if(strpos($file, $sponsor_id . '_') === 0) { 
       $sponsor_files[] = $file; 
      } 
     } 
     closedir($dh); 
    } 
    foreach($sponsor_files as $logo) { 
     echo "<img src='resources/content/sites/" . $logo . "' />"; 
    } 
} 

但最好的解决方案是有正常的命名方案。

+0

感谢您的帮助!我当然同意一个正常的命名方案。这似乎工作得很好! – dennismonsewicz

0

使用这个表达式sponsor_id(_\d+)?\.jpg

+1

不与'glob()'... –