如何通过文件名的关键字匹配对文件数组进行排序

时间:2012-10-24 23:55:54

标签: php arrays sorting dir

我有这个sort函数扫描一个目录并列出所有jpg个文件,我怎么能让它只对文件名匹配指定关键字的jpg个文件进行排序,例如查找和对名称中包含关键字jpg的所有"toys"个文件进行排序。

   $a_img[] = array(); // return values
$keyword = "toys"; // your keyword
$allowed_types = array('jpg'); // list of filetypes you want to show  
 $dimg = opendir($imgdir);  
 while($imgfile = readdir($dimg)) {
     // check to see if filename contains keyword
    if(false!==strpos($keyword, $imgfile)){
       //check file extension
        $extension = strtolower(substr($imgfile, strrpos($imgfile, ".")+1));
        if (in_array($extension, $allowed_types)) {
        // add file to your array
        $a_img[] = $imgfile;
        }
    }   
}
// sort alphabetically by filename
sort($a_img);


   $totimg = count($a_img); // total image number  
   for($x=0; $x < $totimg; $x++)  
       { 

    $size = getimagesize($imgdir.'/'.$a_img[$x]);  
   // do whatever  

   echo $a_img[$x];  

  }

3 个答案:

答案 0 :(得分:0)

您需要使用strpos() - http://php.net/manual/en/function.strrpos.php检查关键字出现的文件名,并且只将这些文件添加到您的数组中。假设您希望按文件名的字母顺序排序,可以使用sort()函数对此数组进行排序 - http://php.net/manual/en/function.sort.php

使用strpos()时请务必测试!==false,否则您在文件名开头的关键字(例如“toys_picture.jpg”)将返回0,这是假的但是不是假的。

您还可以使用strrpos() - http://www.php.net/manual/en/function.strrpos.php - 查找文件名中.的最后一次出现,并在substr()用于支持3和4个字符的文件扩展名(例如“jpg”和“jpeg”)。

$imgdir = "idximages"; // directory
$keyword = "toys"; // your keyword
$allowed_types = array('jpg'); // list of filetypes you want to show  
$a_img = array(); // return values
$dimg = opendir($imgdir);  
while($imgfile = readdir($dimg)) {
    // check to see if filename contains keyword
    if(false!==strpos($imgfile, $keyword)){
        //check file extension
        $extension = strtolower(substr($imgfile, strrpos($imgfile, ".")+1));
        if (in_array($extension, $allowed_types)) {
            // add file to your array
            $a_img[] = $imgfile;
        }
    }   
}
// sort alphabetically by filename
sort($a_img);

// iterate through filenames
foreach ($a_img as $file){
    $imagesize = getimagesize($imgdir.'/'.$file);
    print_r($imagesize);
    list($width, $height, $type, $attr) = $imagesize;
}

答案 1 :(得分:0)

使用strrpos检查子字符串是否存在于另一个字符串

http://php.net/manual/en/function.strrpos.php

查看该页面上的示例,您应该能够匹配toys并将其排除在数组之外(如果不存在)

答案 2 :(得分:0)

也许我错过了一些东西,但在你说“是的,这是一个JPG”之后,你会做一些事情:

if(strstr($imgfile, 'toys'))
{
  //carry on
}