PHP glob()正则表达式模式

PHP glob()正则表达式模式,php,regex,glob,Php,Regex,Glob,我有一个文件夹,其中包含赞助商的徽标。在我的网站中,用户可以属于赞助者,赞助者id在用户登录时在会话中设置 这是我的密码: function sponsor_logos($sponsor_id) { $logos = glob("resources/content/sites/{$sponsor_id}*"); foreach($logos as $logo) { if(file_exists("{$logo}")) echo "<

我有一个文件夹,其中包含赞助商的徽标。在我的网站中,用户可以属于赞助者,赞助者id在用户登录时在会话中设置

这是我的密码:

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

    foreach($logos as $logo) {
        if(file_exists("{$logo}"))
            echo "<img src='/{$logo}' />";
    }
}
功能赞助商标识($赞助商标识){
$logos=glob(“资源/内容/网站/{$shandor_id}*”);
foreach($logo作为$logo){
如果(文件_存在(“{$logo}”))
回声“;
}
}
上述方法可行,但赞助商可以有多个徽标。因此,多个徽标按如下方式保存:赞助商id.jpg、赞助商id_2.jpg、赞助商id_3.jpg


我不是regex最强的,所以非常感谢您的帮助!谢谢

使用此正则表达式
赞助商id(\d+)\.jpg

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

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 . "' />";
    }
}
功能赞助商标识($赞助商标识){
如果($dh=opendir('resources/content/sites/')){
while(($file=readdir($dh))!==false){
如果(STRPO($file,$赞助商id.')==0){
$赞助商文件[]=$file;
}
else if(strpos($file,$shandor\u id.'.\u')==0){
$赞助商文件[]=$file;
}
}
closedir($dh);
}
foreach($赞助商文件为$徽标){
回声“;
}
}

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

你说它有效,那么问题出在哪里
*
应该捕获所有
glob()
不使用正则表达式。@jurgemaister-问题是,如果我传递赞助商id,比如说1,那么上面它会捕获名为10.jpg、11.jpg、12.jpg的赞助商徽标,等等。我正在处理一个遗留系统,因此我无法更改文件名,因此如果赞助商只有一个徽标,则可以将徽标命名为
1.jpg
,但
1_1.jpg
1_2.jpg
等。如果有多个徽标,谢谢您的帮助!我当然同意正常的命名方案。这似乎工作得很好!