1

各位程序员,

我想要完成的是一种使用类从目录中获取图像的动态方法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 语句,并在第二个 if 语句中将其替换为“substr”。

<?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.'">';

                }
            }   
        }       
    }
}
?>
4

1 回答 1

0

1)我看不出你if要分配的语句序列有多大意义$extention。你为什么不做$extention = substr($value,-4)呢?

2)switch($extention)必须在里面if($value !== '..' && $value!=='.')

3)你想通过什么来实现preg_match

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

于 2013-04-13T12:10:28.887 回答