【问题标题】:Storing DirectoryIterator in array (folders and files)将 DirectoryIterator 存储在数组中(文件夹和文件)
【发布时间】:2020-07-16 06:51:09
【问题描述】:

我有这个 foreach 用于检索子目录和文件,然后将它们存储在一个数组中,我正在使用 RecursiveDirectoryIterator 但我愿意使用任何其他可以解决我的问题的方法:

$it = new RecursiveDirectoryIterator($path);

foreach(new RecursiveIteratorIterator($it) as $file){
    if ($file->getExtension() == 'jpg'){

        $folder = ltrim($file->getPath(), $path."/");
        $images[] = array("cod" => $folder, "images" => $file->getFilename());

    }
}

输出是:

array(294) {
  [0]=>
  array(2) {
    ["cod"]=>
    string(5) "8322C"
    ["images"]=>
    string(36) "8322c-pastillas-del-sedona0-12-2.jpg"
  }
  [1]=>
  array(2) {
    ["cod"]=>
    string(5) "8322C"
    ["images"]=>
    string(36) "8322c-pastillas-del-sedona0-12-1.jpg"
  }
  [2]=>
  array(2) {
    ["cod"]=>
    string(5) "7877C"
    ["images"]=>
    string(29) "7877c-pastillas-4runner-2.jpg"
  }
  [3]=>
  array(2) {
    ["cod"]=>
    string(5) "7877C"
    ["images"]=>
    string(29) "7877c-pastillas-4runner-1.jpg"
  }
  [4]=>
  array(2) {
    ["cod"]=>
    string(9) "D889-7767"
    ["images"]=>
    string(30) "pastilla-spectra-rio-bex-1.jpg"
  }
  ...

所以我想要实现的是不重复变量cod(在这种情况下是目录),所以它看起来像:

array(294) {
  [0]=>
  array(2) {
    ["cod"]=>
    string(5) "8322C"
    ["images"]=>
    string(74) "8322c-pastillas-del-sedona0-12-1.jpg, 8322c-pastillas-del-sedona0-12-2.jpg"
  }
  [1]=>
  array(2) {
    ["cod"]=>
    string(5) "7877C"
    ["images"]=>
    string(60) "7877c-pastillas-4runner-1.jpg, 7877c-pastillas-4runner-2.jpg"
  }
  [3]=>
  array(2) {
    ["cod"]=>
    string(9) "D889-7767"
    ["images"]=>
    string(30) "pastilla-spectra-rio-bex-1.jpg"
  }
  ...

你能帮帮我吗? 这可能吗?

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    您可以先检查该元素是否重复,如果不重复则将其添加到数组中,否则在现有条目中添加新的:

    $index = findArrayInArray($images, "cod", $folder);
    if($index >= 0)
        $images[$index]["images"] .= ", ".$file->getFilename());
    else
        $images[] = array("cod" => $folder, "images" => $file->getFilename());
    

    而不是

    $images[] = array("cod" => $folder, "images" => $file->getFilename());
    

    使用在数组中搜索数组的简单函数(使用键和值):

    function findObjectInArray($arr, $key, $val){
        for($i = 0; $i < count($arr); $i++)
            if (isset($arr[$i][$key]) and $arr[$i][$key] == $val)
                return $arr[$i];
            return -1;
    }
    

    【讨论】:

    • 您好,感谢您的回复,我修正了您的代码中的一些拼写错误(一个额外的“)”和函数名称),但是抛出了这个错误:Illegal offset type 在这一行:$images[$index][$images] .= ", ".$file-&gt;getFilename();
    • 哦,对不起,这应该是字符串。我编辑了那行。请尝试使用您修复的错别字来编辑我的答案。提前致谢。
    • 也许你没有删除错误的$,这应该可以。
    • 是的,我这样做了:$images[$index]["images"] .= ", ".$file-&gt;getFilename();
    • 感谢您的努力!我在这里找到了解决方案:stackoverflow.com/questions/51507724/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-25
    • 2021-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多