我试图找到包含特定子字符串的数组的所有行。
我有一个包含我所有产品编号或SKU的数组。
我有另一个数组,其中包含在目录及其许多子目录中找到的图像路径。
(使用遍历目录的RecursiveIterator填充此图像路径数组,并将所有文件路径添加到此数组中)
每个图像名称都包含其中的SKU,因此sku#123可能包含以下图像:
123.jpg
123_1.jpg
123_2.jpg
等等。
我想输出与特定sku相关联的所有图像。 这是我开始的代码。出于某种原因,我只获得了最后一次sku的预期结果。
$dir = "./images"; // directory with images
$skus = file("./source.csv"); // source file with all skus
$all_images = array(); // array to hold all image paths found in folder
// recursively search through directory save all file paths to array
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir)) as $f) {
$all_images[] = $f;
}
// loop through each sku and find its image paths
for($i=0; $i < count($skus); $i++){
$values = preg_grep("/$skus[$i]/", $all_images);
echo "----sku: $skus[$i] -----<br /><br />";
foreach($values as $val)
echo "Values: $val<br />";
}
我的结果页面如下所示:
----sku: TR450 -----
----sku: TR451 -----
----sku: TR452 -----
----sku: TR453 -----
----sku: TR454 -----
----sku: TR455 -----
----sku: TR456 -----
Values: ./images\brand\make\TR456 - abacus\TR457.jpg
Values: ./images\brand\make\TR457 - abacus\TR457_Diagram.jpg
Values: ./images\brand\make\TR458 - abacus\Thumbs.db
我不确定为什么这只适用于最后一个SKU?
谢谢。
答案 0 :(得分:0)
尝试在变量中设置模式并将变量传递给preg_grep
。
$pattern = '/'. $skus[$i] . '/';
$values = preg_grep($pattern, $all_images);
答案 1 :(得分:0)
我设法通过发现$ skus在它们的末尾都有空格来解决问题。不确定空间是如何进入的,但这导致模式无法被识别!
('sku123 ' != 'sku123')
这是我的代码:
$dir = "./images"; // directory with images
$skus = file("./source.csv"); // source file with all skus
$skus = array_filter(array_map('trim', $skus)); // this is the only new line,
//it removes white space after the sku
// so the pattern below can actually work.
$all_images = array(); // array to hold all image paths found in folder
// recursively search through directory save all file paths to array
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir)) as $f) {
$all_images[] = $f;
}
// loop through each sku and find its image paths
for($i=0; $i < count($skus); $i++){
$values = preg_grep("/$skus[$i]/", $all_images);
echo "----sku: $skus[$i] -----<br /><br />";
foreach($values as $val)
echo "Values: $val<br />";
}