2014-12-09 25 views
5

Şu anda ettik aşağıdaki ağaç yapısına benzer: Ben php son derece yeniyim gibigelen bir dizideki tüm görüntüleri almak dizin ve alt dizinleri

+images 
    +sub-directory 
     -image1.jpg 
     -image2.jpg 
    +sub-directory-2 
     -image3.jpg 
     -image4.jpg 
    -some-image.jpg 
    -another.jpg 

<script> 
<?php 
//path to directory to scan. i have included a wildcard for a subdirectory 
$directory = "images/*/"; 

//get all image files with a .jpg extension. 
$images = glob("" . $directory . "*.jpg"); 

$imgs = ''; 
// create array 
foreach($images as $image){ $imgs[] = "$image"; } 
echo "var allImages = ".$imgs.";\n"; 
?> 

console.log(allImages); 
</script> 

, ben m körü körüne Array() olarak giriş yapılıyor.

Ayrıca, $directory = "images/*/"; ayarını yaptım, bu da tüm görüntüleri yalnızca alt klasörlerin içine alacak, ancak üst dizinin içinde images/some-image.jpg olmasını olası görecek ve bu da almak istedim.

['some-image.jpg','another.jpg','image1.jpg','image2.jpg','image3.jpg','image4.jpg'] 
+0

Alt dizinlerin ne kadar derine gidiyor? Çok derin değilse, php glob kılavuzu sayfasında birkaç özyineli glob fonksiyonu var diye soruyorum. Oldukça derinse, belki de size daha hızlı bir sonuç verebilecek olan bulma ile exec kullanımına bakın. –

+0

@JonathanKuhn Şu anda daha fazla alt dizinim yok ve bununla birlikte iyi olur. –

cevap

0

Bunun neresi:


böyle bir diziye (ı console.log(allImages); kullandığınızda) tüm görüntüleri istediğiniz güzel şeyler tutar,

<script> 

<?php 

$directory = "images/*/"; 

$images = glob("" . $directory . "*.jpg"); 

echo "var allImages = ['".implode("', '", $images)."'];\n"; 

?> 

console.log(allImages); 

</script> 
+0

İyi çalışıyor! Ayrıca resim dizininde bulunan bazı image.jpg gibi görüntüleri almam gerekiyor. Şu anda tüm alt dizinleri görüntüleri alıyor. –

+0

json_encode'u kullanmamanın bir nedeni var mı? –

+0

json gitmek için yol olurdu, sadece istenen çözümü belirledim. – Eric

3

Ben JSON seviyorum ve basit:

<?php 
$images = glob("images/*/*.jpg"); 
$imgs = array(); 
foreach($images as $image){ $imgs[] = $image; } 
?> 
<script> 
    var allImages = JSON.parse('<?php echo json_encode($imgs);?>'); 
    console.log(allImages); 
</script> 

Artık javascript'te aynı yapıya sahip php dizisine sahipsiniz. JQuery, $.each()'unuz varsa bunları for ile döngüleyebilirsiniz.
Bir kodu tarzınıza daha fazla değiştirdim (php ve html'yi karıştırma), ancak bunları htmltemplates'de bölmeye çalışmalısınız. Bu foreach, bu sadece dosya adları dönecektir gerekmez çalışırsa siz, topak halinde regex olabilir


Im% 100 bu konuda emin değil:

$images = glob("~(?:images/*/)*\.jpg~"); 
+0

Kodunuzu biraz daha değiştirdim. Bu sizin yaptığınız gibi aynı değişkenleri kullanır, çalışmalıdır. – Martijn

+0

SyntaxError: kayıp) argüman listesinden sonra var allImages = JSON.parse ("[" images \/ads \ /ad-img-1.jpg "," images \/ads \/ad-specia ... –

+0

Tek tırnaklara taktım.Dizininiz aradığınız şey olmayabilir, ama 'print_r()' ile, JS sürümünün – Martijn

0

nasıl özyinelemeli fonksiyon hakkında?

function loadImages($folder) 
{ 
    $files = glob($folder); 
    foreach($files as $file) 
    { 
     if(is_dir($file)) 
     { 
      loadImages($file); 
     } else { 
      $images[] = $file; // add some file type validation here 
     } 
    } 

    return $images; 
} 

$images = json_encode(loadImages($startFolderPath)); 

iPad'deyim, bu yüzden test edemiyorum.

İlgili konular