2017-05-31 3 views
0

ich, indem Sie eine Liste von Dateien zu einem Array hinzufügen: mit print_r(array_values($array));Dateien auf Array - glob vs RecursiveIteratorIterator

$files = glob($path."*.*"); 

ich ausgeben kann das Array.

Jetzt versuche ich, das gleiche mit RecursiveIteratorIterator zu tun:

$files = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($path) 
); 

, die nicht wie erwartet funktioniert, wenn ich die Ausgabe des Array versuchen?

print_r(array_values($files)); 

Wie kann ich das gleiche Ergebnis erhalten?

+1

'files' $ ist ein Iterator, kein Array. – Barmar

+1

Sie müssen darüber mit 'foreach' iterieren. – Barmar

+0

@Barmar Können Sie bitte ausarbeiten? Ich bin ziemlich neu im Codieren. – MikeSkril

Antwort

1

Iteratoren sind nicht identisch mit Arrays. Um einen Iterator zu verwenden, müssen Sie mit foreach darüber iterieren.

<?php 
$path = "test.dir"; 
$files = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($path) 
); 
$file_array = array(); 
foreach ($files as $f) { 
    $file_array[] = $f; 
} 
print_r($file_array); 

Ausgang:

Array 
(
    [0] => SplFileInfo Object 
     (
      [pathName:SplFileInfo:private] => test.dir/. 
      [fileName:SplFileInfo:private] => . 
     ) 

    [1] => SplFileInfo Object 
     (
      [pathName:SplFileInfo:private] => test.dir/.. 
      [fileName:SplFileInfo:private] => .. 
     ) 

    [2] => SplFileInfo Object 
     (
      [pathName:SplFileInfo:private] => test.dir/sub1/. 
      [fileName:SplFileInfo:private] => . 
     ) 

    [3] => SplFileInfo Object 
     (
      [pathName:SplFileInfo:private] => test.dir/sub1/.. 
      [fileName:SplFileInfo:private] => .. 
     ) 

    [4] => SplFileInfo Object 
     (
      [pathName:SplFileInfo:private] => test.dir/sub1/filea.jpg 
      [fileName:SplFileInfo:private] => filea.jpg 
     ) 

    [5] => SplFileInfo Object 
     (
      [pathName:SplFileInfo:private] => test.dir/sub1/fileb.jpg 
      [fileName:SplFileInfo:private] => fileb.jpg 
     ) 

    [6] => SplFileInfo Object 
     (
      [pathName:SplFileInfo:private] => test.dir/sub2/. 
      [fileName:SplFileInfo:private] => . 
     ) 

    [7] => SplFileInfo Object 
     (
      [pathName:SplFileInfo:private] => test.dir/sub2/.. 
      [fileName:SplFileInfo:private] => .. 
     ) 

    [8] => SplFileInfo Object 
     (
      [pathName:SplFileInfo:private] => test.dir/sub2/sub21/. 
      [fileName:SplFileInfo:private] => . 
     ) 

    [9] => SplFileInfo Object 
     (
      [pathName:SplFileInfo:private] => test.dir/sub2/sub21/.. 
      [fileName:SplFileInfo:private] => .. 
     ) 

    [10] => SplFileInfo Object 
     (
      [pathName:SplFileInfo:private] => test.dir/sub2/sub21/filee.jpg 
      [fileName:SplFileInfo:private] => filee.jpg 
     ) 

) 
+0

Ich habe das jetzt versucht, aber das Array ist leer, wenn ich 'print_r (array_values ​​($ file_array));'. – MikeSkril

+0

Ich habe es gerade versucht, es funktioniert für mich. Vielleicht haben Sie beim Erstellen des Iterators keinen korrekten $ Pfad angegeben. – Barmar

+0

Ich glaube, ich habe es jetzt. Danke für die Hilfe! – MikeSkril