strpos болея точный поиск

Есть папка с файлами

$dir    = 'imgbank/IMPERGOM';

$a = array_diff(scandir($dir), array('..', '.'));

foreach($a as $b){
    
 $aCode =  substr($b, 0, -4);
 
 if(strpos($aCode, "2391") !== false)   
    $c .= $b."<br>";
}

die($c);

Результат вывода такой:

222391.jpg
223910.jpg
223911.jpg
223912.jpg
2391.jpg
23910.jpg
23911.jpg
23914.jpg
23915.jpg
23916.jpg
23917.jpg
23918.jpg
23919.jpg
32391.jpg
72391.jpg

Нужно что бы выводило только так:

2391.jpg 
2391_1.jpg, 2391_2.jpg итд 
2391-1.jpg, 2391-2.jpg итд

Ответы (1 шт):

Автор решения: Алексей Шиманский

Получилось немного сложновато)) Можно намного проще, но не сейчас))

$input = ['222391.jpg', '223910.jpg', '223911.jpg', '223912.jpg', '2391.jpg', '23910.jpg', '23911.jpg', '23914.jpg', '23915.jpg', '23916.jpg', '23917.jpg', '23918.jpg', '23919.jpg', '32391.jpg', '72391.jpg', '2391_1.jpg', '2391_2.jpg', '2391-1.jpg', '2391-2.jpg'];

foreach ($input as $path) {
    $searchingNumber = '2391';
    printSearchingImageOrCode($path, $searchingNumber);
}

function printSearchingImageOrCode($path, $searchingNumber) {
    $number = substr($path, 0, -4);
    $signAfterNumber = substr($path, strlen($searchingNumber), 1);
    
    $numberExists = strpos($number, $searchingNumber) !== false && strpos($number, $searchingNumber) === 0;
    
    if ($numberExists && in_array($signAfterNumber, ['.', '_', '-'])) {
        echo $path . "<br>";
    }   
}

Результат:

2391.jpg
2391_1.jpg
2391_2.jpg
2391-1.jpg
2391-2.jpg

А вообще, артикулы можно было бы хранить в подпапках, или в отдельной папке с артикулами, где каждая папка будет названа в соответствии с картинкой

→ Ссылка