2014-12-09 2 views
5

현재 I했습니다 다음과 같은 트리 구조와 유사 : 나는 PHP에 매우 새로 온 사람으로에서 배열의 모든 이미지를 얻을 수 디렉토리 및 하위 디렉토리

+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> 

, 내가 ' m 맹목적으로 콘솔에 Array()로 기록됩니다.

또한 $directory = "images/*/";을 설정했는데 하위 폴더에만있는 모든 이미지를 가져 오지만 상위 디렉토리에있는 이미지는 images/some-image.jpg 일 가능성이 높습니다.이 이미지도 얻으려고합니다.

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

하위 디렉토리와 얼마나 멀리 떨어져 있습니까? 필자가 깊이가 없다면 php glob 매뉴얼 페이지에 여러 재귀 glob 함수가 있기 때문에 물어볼 것이다. 그것이 상당히 깊다면, 아마도 find를 사용하여 exec를 사용하는 것이 더 빠른 결과를 줄 것입니다. –

+0

@JonathanKuhn 현재 하위 디렉토리가별로 없으며 괜찮습니다. –

답변

0

무엇 이것에 대해 :


내가 이런 배열 (내가 console.log(allImages);를 사용하는 경우)에있는 모든 이미지를 원하는 좋은 일을 유지

<script> 

<?php 

$directory = "images/*/"; 

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

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

?> 

console.log(allImages); 

</script> 
+0

잘 작동합니다! 또한 이미지 디렉토리에있는 some-image.jpg와 같은 이미지를 가져와야합니다. 현재 모든 하위 디렉토리 이미지를 가져 오는 중입니다. –

+0

json_encode를 사용하지 않을 이유가 있습니까? –

+0

json이 갈 방법이 될 것입니다. 방금 원하는 솔루션을 지정했습니다. – Eric

3

내가 JSON을 사랑하고 단순 :

<?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> 

이제 php 배열을 javascript와 동일한 구조로 사용할 수 있습니다. for, jQuery가있는 경우 $.each()으로 반복 할 수 있습니다.
phtml과 html을 혼합하여 코드를 스타일에 맞게 변경했지만 htmltemplates에서 코드를 분할해야합니다. 이 당신이 foreach는, 이것은 단지 파일 이름 반환을하지 않아도 작동하는 경우에 당신이 당신의 글로브에서 정규식 수


임 100 % 이것에 대해 확실하지만,하지 :

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

코드와 조금 비슷하게 변경했습니다. 이것은 동일한 변수를 사용하므로 작동해야합니다. – Martijn

+0

SyntaxError : missing) 인수 목록 뒤에서 \t var allImages = JSON.parse ("images"/ images//ad-img-1.jpg ","images \/ads \/ad-specia ... –

+0

나는 작은 따옴표를 사용했다.나는 당신의 배열이 당신이 찾고있는 것 같지는 않지만'print_r()'을 사용하면 PHP 배열을 검사하여 JS 버전이 무엇인지 알 수 있습니다. – Martijn

0

방법 재귀 함수에 대해?

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에서 테스트 할 수 없습니다.