PHP preg_match:通过类函数链接单个或多个图像

时间:2013-04-13 11:45:30

标签: php image class preg-match switch-statement

嘿同事们,

我想要完成的是使用类image从目录中获取图像的动态方式。

我坚持提供一个返回匹配的精确字符串,但是当尝试使用返回的匹配回显"时,如果未提供整个字符串,那么图像将链接到部分字符串加上扩展

<?php $image = new image; ?>

使用:

调用类函数
<?php $image -> get_image('this_string_1',''); ?>

图像目录内容

<?php $path = $_SERVER['DOCUMENT_ROOT'].'/images/;'?>

this_string_1.png

this_string_2.png

this_string_3.png

班级:

<?php 
class image{
    function get_image($name,$class){
    if(strlen($class)==0){ $class="default"; }
    ##@@[ Checks the type of image
    global $doc_root,$html_path;
    if($handle = opendir($doc_root.'/images/')){
        while(false !==($value = readdir($handle))){
            if($value !== '..' && $value!=='.'){
                $extention;
                $ext_jpeg = substr($value,-3);
                    if($ext_jpeg=='jpg'){
                        $extention=".jpg";
                    }
                $ext_png = substr($value,-3);
                    if($ext_png=='png'){
                        $extention=".png";
                    }
                $ext_gif = substr($value,-3);
                    if($ext_gif=='gif'){
                        $extention='.gif';
                    }
                }
            switch($extention){
                case '.jpg':
                if(preg_match("/$name/",$value,$result)){
                    foreach($result as $jpg){
                        echo '<img class="'.$class.'" src="'.$html_path.'/images/'.$jpg.'.jpg">';
                        }
                    }
                break;
                case '.png':
                if(preg_match("/$name/",$value,$result)){
                    foreach($result as $png){
                        echo '<img class="'.$class.'" src="'.$html_path.'/images/'.$png.'.png">';
                        }
                    }
                break;
                case '.gif':
                if(preg_match("/$name/",$value,$result)){
                    foreach($result as $gif){
                        echo '<img class="'.$class.'"src="'.$html_path.'/images/'.$gif.'.gif">';
                        }
                    }
                break;

                }
            }   
        }       
    }
}
?>

我确信有很多方法可以完成这样的事情。任何建议都将不胜感激。

根据马丁斯的建议。 我删除了if和switch语句,并将其替换为&#34; substr&#34;在第二个if语句中。

<?php 
class image{
    function get_image($name,$class){
    if(strlen($class)==0){ $class="default"; }
    global $doc_root,$html_path;
    if($handle = opendir($doc_root.'/images/')){
        while(false !==($value = readdir($handle))){
            if($value !== '..' && $value!=='.' && substr($value, 0, -4)==$name){

                echo '<img src="'.$html_path.'/images/'.$value.'">';

                }
            }   
        }       
    }
}
?>

1 个答案:

答案 0 :(得分:0)

1)我没有看到你的if语句序列分配$extention的重点。你为什么不这样做$extention = substr($value,-4)

2)switch($extention)必须位于if($value !== '..' && $value!=='.')

3)你想通过preg_match实现什么目标?

如果您只想完全匹配名称,请执行substr($value, 0, -4) == $name。那么这依赖于有3个字符的扩展,什么不完美,但你已经依赖它了。