0

特定のサブ文字列を含む配列のすべての行を検索しようとしています。

すべての製品番号またはSKUを含むアレイがあります。

ディレクトリとその多くのサブディレクトリ内にある画像へのパスを含む別の配列があります。

(この画像パスの配列は、ディレクトリを通過し、すべてのファイルパスをこの配列に追加するRecursiveIteratorを使用して入力されます)

各画像名にはSKUが含まれているため、sku#123には次の画像が含まれる場合があります : 123.jpg123_1.jpg123_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 に答える