nick888
nick888

Reputation: 43

How to get list of files as array, where key is the same as value?

I could use some help with this. I have to get list of files from one directory, and return them as array, but key needs to be the same as value, so output would be looking like this:

array( 
    'file1.png' => 'file1.png', 
    'file2.png' => 'file2.png', 
    'file3.png' => 'file3.png' 
) 

I found this code:

function images($directory) {

    // create an array to hold directory list
    $results = array();

    // create a handler for the directory
    $handler = opendir($directory);

    // open directory and walk through the filenames
    while ($file = readdir($handler)) {

        // if file isn't this directory or its parent, add it to the results
        if ($file != "." && $file != "..")
        {
            $results[] = $file;
        }

    }

    // tidy up: close the handler
    closedir($handler);

    // done!
    return $results;
}

It's working fine, but it returns regular array.

Can someone help me with this?

Also small note at the end, I need to list only image files (png,gif,jpeg).

Upvotes: 1

Views: 213

Answers (4)

Alain
Alain

Reputation: 36954

Why not using glob and array_combine ?

function images($directory) {
   $files = glob("{$directory}/*.png");
   return array_combine($files, $files);
}
  • glob() get files on your directory according to a standard pattern ( such as *.png )
  • array_combine() creates an associative array using an array of keys and an array of values

Upvotes: 0

Simone
Simone

Reputation: 21272

Something like this should to the work

$image_array = [];
foreach ($images as $image_key => $image_name) {
  if ($image_key == $image_name) {
     $image_array[] = $image_name; 
  }
  return $image_array;
}

Upvotes: 0

saidOnder
saidOnder

Reputation: 15

now do this on my script

    $scan=scandir("your image directory");
$c=count($scan);
echo "<h3>found $c image.</h3>";
for($i=0; $i<=$c; $i++):
if(substr($scan[$i],-3)!=='png') continue;
echo "<img onClick=\"javascript:select('$scan[$i]');\" src='yourdirectory/$scan[$i]' />";
endfor;

this code only list png images from your directory.

Upvotes: -1

GBD
GBD

Reputation: 15981

Change your following line

$results[] = $file;

To

$results[$file] = $file;

To limit file extension do as below

$ext = pathinfo($file, PATHINFO_EXTENSION);
$allowed_files = array('png','gif');
if(in_array($ext,$allowed_files)){
    $results[$file] = $file;
}

Upvotes: 5

Related Questions