如何检查数组是否包含以PHP中的字符串开头的条目

时间:2015-02-27 15:33:17

标签: php arrays regex

我有一个小的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开始的多个图像并打印出数组键。

谢谢

3 个答案:

答案 0 :(得分:0)

使用函数preg_grep,它专门用于返回数组元素;

http://php.net/manual/en/function.preg-grep.php

答案 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');