0

我正在尝试查找包含特定子字符串的数组的所有行。

我有一个包含我所有产品编号或 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?

谢谢你。

4

2 回答 2

0

尝试在变量中设置您的模式并将变量传递给preg_grep.

$pattern = '/'. $skus[$i] . '/';
$values = preg_grep($pattern, $all_images);
于 2012-12-03T20:25:35.250 回答
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 />";  
}
于 2012-12-04T17:13:34.580 回答