PHP - 不区分大小写的文件搜索

7
我需要检查图片文件夹以添加一些产品图片。我的产品列表数组有SKU,例如a48be25、A48be29、A48BE30,我的图像文件夹中有像a48BE25_1.jpg、a48bE29_2.JPG、A48BE30_1.jpg等的图像。
如您所见,图片和SKU是混合在一起的。我需要以某种方式匹配SKU和文件名。如果我使用glob("my/dir/{$SKU}*.jpg"),据我所知,在区分大小写的操作系统中无法正常工作。是否有一种方法可以强制glob以不区分大小写的方式搜索?
编辑:我认为这个主题不是这个主题的重复。我之所以这样说,是因为在我的情况下,我可能有许多SKU,它们可能大小写混合。在提到的主题中,OP只有单词CSV大小写混合,所以glob('my/dir/*.[cC][sS][vV]')在那里可以很好地工作。

2
你尝试过链接问题中的第二个答案吗?它建议你先获取文件名,然后在第二步以不区分大小写的方式进行比较。 - George Cummins
1
@noc2spamツ 我认为如果你有很多图片,那么最好使用 PHP 处理,而不是让文件系统来处理。 - Rizier123
1
好的。只需要一次使用处理能力(遍历目录并将所有文件转换为大写或小写),而不必在每个页面显示时都执行它,这似乎更好。祝你好运。 - DragonYen
1
如果你使用的是Windows系统,那么大小写不会成为问题。不幸的是,你使用的是Linux系统,这是完全不同的东西。 - Funk Forty Niner
1
你也可以尝试批量重命名为大写或小写;这是一个选项。 - Funk Forty Niner
显示剩余6条评论
1个回答

3

我最终从文件夹中获取了所有图片,并在图像名称数组中检查每个sku。

下面的代码解决了我的问题:

$path = $image_path ."/*.{jpg,png,gif}";
$all_images = glob($path, GLOB_BRACE);
$icount = count($all_images);
for($i = 0; $i < $icount; $i++)
{
    $all_images[$i] = str_replace($image_path.'/', '', $all_images[$i]);
}

foreach($products as $product){
    $matches  = preg_grep ('/^'.$product['sku'].'(\w+)/i', $all_images);
}

尽管如此,我希望未来能够实现不区分大小写的glob


1
我一直在保持这个标签页打开,哈哈 - 很高兴看到您已经找到解决方案,但正如您所述,一个不区分大小写的glob在未来的PHP版本中将是一个值得添加的功能。您可以在php.net上发布这些内容 - 干杯 - Funk Forty Niner
抱歉,我不能发布C代码。我太菜了。我只是一个Web开发者。希望未来的PHP版本中会有人实现它。 :) - Gogol
2
没问题。我会四处传话的。我有一个朋友认识PHP.net上的那个人;-) 干杯 - Funk Forty Niner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接