如何将文件列表作为数组,其中key与value相同?

时间:2012-10-13 08:07:54

标签: php arrays file list

我可以用一些帮助。我必须从一个目录获取文件列表,并将它们作为数组返回,但键必须与值相同,因此输出将如下所示:

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

我找到了这段代码:

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;
}

它工作正常,但它返回常规数组。

有人可以帮我这个吗?

最后还是小记,我只需要列出图像文件(png,gif,jpeg)。

4 个答案:

答案 0 :(得分:5)

更改以下行

$results[] = $file;

$results[$file] = $file;

限制文件扩展名如下

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

答案 1 :(得分:0)

这样的事情应该是工作

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

答案 2 :(得分:0)

为什么不使用globarray_combine

function images($directory) {
   $files = glob("{$directory}/*.png");
   return array_combine($files, $files);
}
  • glob()根据标准模式(例如* .png)
  • 获取目录中的文件
  • array_combine()使用键数组和值数组
  • 创建关联数组

答案 3 :(得分:-1)

现在在我的脚本上执行此操作

    $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;

此代码仅列出目录中的png图像。