【问题标题】:search directories and only jpg/js and fetch in array搜索目录,仅 jpg/js 并在数组中获取
【发布时间】:2013-08-27 11:06:09
【问题描述】:

我正在使用一个函数来显示所有文件。但我不确定如何在逗号分隔的变量中获取它,然后在数组中获取。 这是我用过的函数。

function recursiveGlob($dir, $ext1, $ext2, &$array) {
$globFiles = glob("$dir/*.$ext1");
$globFiles2 = glob("$dir/*.$ext2");
$globDirs  = glob("$dir/*", GLOB_ONLYDIR);

foreach ($globDirs as $dir) {
    recursiveGlob($dir, $ext1, $ext2);
}

foreach ($globFiles as $file) {
    // print "$file<br>"; // Replace '\n' with '<br />' if outputting to browser
    $array[] = $file;
}
foreach ($globFiles2 as $file) {
    // print "$file<br>"; // Replace '\n' with '<br />' if outputting to browser
    $array[] = $file;
}
}
$array = array ();
recursiveGlob('C:\wamp\www\scanner\scanner', 'png', 'js', $array);

这可能是一个愚蠢的问题。但是请帮帮我。

【问题讨论】:

  • get all files in a variable 没有任何意义。你介意改名吗?

标签: php arrays function


【解决方案1】:

似乎最后你想要一个包含你找到的每个文件的数组,只需替换

print $file;

$array[] = $file;

然后,使用引用在递归函数中发送这个数组:

function recursiveGlob($dir, $ext1, $ext2, &$array)

并像这样使用它:

$array = array ();
recursiveGlob('C:\wamp\www\scanner\scanner', 'png', 'js', $array);
// At this point, $array will be an array with every files you found.

告诉我我是否正确解决了您的问题,如果您需要在路径级别对数组进行排序,不确定您在寻找什么,但它会导致数组更清晰。

另一个没有引用并返回数组的解决方案:

function recursiveGlob($dir, $ext1, $ext2) {
$globFiles = glob("$dir/*.$ext1");
$globFiles2 = glob("$dir/*.$ext2");
$globDirs  = glob("$dir/*", GLOB_ONLYDIR);
$array = array ();
$array_file = array ();
foreach ($globDirs as $dir) {
    $array = array_merge ($array, recursiveGlob($dir, $ext1, $ext2));
}

foreach ($globFiles as $file) {
// print "$file<br>"; // Replace '\n' with '<br />' if outputting to browser
    $array_file[] = $file;
}
$array = array_merge ($array, $array_file);
$array_file = array ();
foreach ($globFiles2 as $file) {
// print "$file<br>"; // Replace '\n' with '<br />' if outputting to browser
    $array_file[] = $file;
}
$array = array_merge ($array, $array_file);
return $array;
}
$results = recursiveGlob('C:\wamp\www\scanner\scanner', 'png', 'js');

【讨论】:

  • 感谢您的回答,但我收到警告:警告:recursiveGlob 缺少参数 4(
  • 你忘了用我给你的替换最后一行调用 recursiveGlob。在末尾添加$array 参数。 recursiveGlob('C:\wamp\www\scanner\scanner', 'png', 'js'); -> recursiveGlob('C:\wamp\www\scanner\scanner', 'png', 'js', $array);
  • 我已经补充说,正如你所说,根据你的回答编辑了我有问题的代码
  • 哦,是的,顺便说一下,您也必须在递归函数中替换它。在第一个 foreach 循环中。抱歉,没想到。
  • 是的,也请你帮我在函数外的变量中获取它。即 recursiveGlob('C:\wamp\www\scanner\scanner', 'png', 'js', $array); ,我可以在变量中得到它吗,例如: $result = recursiveGlob('C:\wamp\www\scanner\scanner', 'png', 'js', $array);
【解决方案2】:

试试这个:

<?php
  $iterator = new DirectoryIterator("folder name");
  foreach ($iterator as $fileinfo) {


   if ($fileinfo->isFile()) {
        if ($fileinfo->getExtension() == "jpg" || $fileinfo->getExtension() == "js"){
       echo $fileinfo->getBasename('.'.$fileinfo->getExtension())."<br>";
       }
     }
}
?>

【讨论】:

    猜你喜欢
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    • 2015-06-15
    • 2016-08-20
    • 2012-06-15
    • 2015-10-09
    相关资源
    最近更新 更多