我有一个小的PHP脚本,使用scandir
扫描目录并创建一个数组。
现在,我扫描的目录中有很多图像,其中一些与同一产品相关,并以这种方式命名:
Test_product.jpg
Test_product_2.jpg
Test_product_3.jpg
依旧......
现在,我试图检查数组(scandir)是否包含这些名称,但当我尝试使用preg_match
匹配正则表达式时说"如果数组条目以#34开头..."它不会起作用。
以下是我使用的代码:
$imageFolder = $_SERVER['DOCUMENT_ROOT'] . '/service/img';
$imageList = scandir($imageFolder, 1);
while ($row = $result->fetch_assoc()) {
$image_filename = $row['image_filename'];
$pattern = '/^' . $image_filename . '/';
preg_match($pattern, $image_filename, $matches, PREG_OFFSET_CAPTURE);
print_r($matches[0]);
if (in_array($matches, $imageList)) {
$key = array_search($matches, $imageList);
echo $key;
} else {
echo "not found";
}
我想要实现的基本上是创建数组,检查数组是否包含从$image_filename
开始的多个图像并打印出数组键。
谢谢
答案 0 :(得分:0)
使用函数preg_grep,它专门用于返回数组元素;
答案 1 :(得分:0)
最后,我设法以这种方式解决了这个问题:
$imageFolder = $_SERVER['DOCUMENT_ROOT'] . '/service/img';
$imageList = scandir($imageFolder, 1);
while ($row = $result->fetch_assoc()) {
$image_filename = $row['image_filename'];
$withoutExt = preg_replace('/\\.[^.\\s]{3,4}$/', '', $image_filename);
$pattern = '/^(' . quotemeta($withoutExt) . ').*$/';
foreach ($imageList as $image) {
if (preg_match($pattern, $image)) {
if (in_array($image, $imageList)) {
$key = array_search($image, $imageList);
echo $key;
} else {
echo "not found";
}
}
}
非常感谢您的帮助!祝你有个美好的一天!
答案 2 :(得分:0)
使用php glob()
以这种方式尝试获取
$files = glob('TEST_*.jpg');