-1

画像ギャラリー用に次のコードがあります。

$directory = 'some path';
$thumbs_directory = 'some path';
foreach (glob($directory.'/*.{jpg,jpeg,png,gif}', GLOB_BRACE) as $file) 
foreach (glob($thumbs_directory.'/*.{jpg,jpeg,png,gif}', GLOB_BRACE) as $file2)
{

    if($file=='.' || $file == '..') continue;
    $file_parts = explode('.',$file);
    $ext = strtolower(array_pop($file_parts));
    $title = basename($file);
    $title = htmlspecialchars($title);
    $title = str_replace("_"," ",$title);
    $nomargin='';
    if(($i+1)%4==0) $nomargin='nomargin';
    echo '
    <div class="pic '.$nomargin.'" style="background:url('.$file2.') no-repeat 50% 50%;">
    <a href="'.$file.'" title="'.$title.'" target="_blank">'.$title.'</a>
    </div>';
    $i++;
}

両方の条件が同時に満たされるように、論理AND演算子&&を使用してこれらのforeachステートメントを組み合わせる必要があります。出来ますか ?何度も試しましたが、常に構文エラーが発生します。

$file変数と$file2変数を完全に定義する必要があることに注意してください。これは、サムネイルを画像に適切に関連付けるための唯一の方法です。

4

3 に答える 3

1

肉付きの良いロジックを単純にリファクタリングして共通の関数にし、それを2回呼び出すことはできませんか?

例えば:

function doSomething($directory) {
    foreach (glob($directory.'/*.{jpg,jpeg,png,gif}', GLOB_BRACE) as $file) {
        /* Whatever */
    }
}

...

doSomething($directory);
doSomething($thumbs_directory);
于 2013-03-10T23:10:45.773 に答える
1

画像をそれぞれのサムネイル画像にマッピングするには、別のアプローチを選択します。

$directory = 'some path';
$thumbs_directory = 'some path';

// Get all images
$images = glob($directory.'/*.{jpg,jpeg,png,gif}', GLOB_BRACE);

// Iterate over all images
foreach ($images as $image) {
    // Construct path to thumbnail
    $thumbnail = $thumbs_directory .'/'. basename($image);

    // Check if thumbnail exists
    if (!file_exists($thumbnail)) {
        continue; // skip this image
    }

    // .. continue as before

    echo '
        <div class="pic '.$nomargin.'" style="background:url('.$thumbnail.') no-repeat 50% 50%;">
        <a href="'.$image.'" title="'.$title.'" target="_blank">'.$title.'</a>
        </div>
    ';
}

}

于 2013-03-10T23:11:33.570 に答える
1

説明に基づいて、両方のディレクトリに存在する画像ファイルをループする場合は、phpのarray_intersect()の使用を検討する必要があります。

$directory = 'some path';
$thumbs_directory = 'some path';

$files_in_dir1 = glob($directory.'/*.{jpg,jpeg,png,gif}', GLOB_BRACE);
$files_in_dir2 = glob($thumbs_directory.'/*.{jpg,jpeg,png,gif}', GLOB_BRACE);

$files_in_both_dirs = array_intersect($files_in_dir1, $files_in_dir2);

foreach ($files_in_both_dirs as $filename) {
  // Code
}
于 2013-03-10T23:16:03.427 に答える