рекурсивные результаты итератора каталога: отфильтровывать определенные символы из результирующих путей

0

Я пытаюсь возвращать все уникальные пути экземпляров из указанного каталога, рекурсивно.

Я использую RecursiveDirectoryIterator. Я также хотел бы опустить любые экземпляры путей, которые содержат ".". в них, где у меня проблемы.

Вот то, что я собираюсь в качестве теста:

<?php

function test($dir){

    $dirArray = []; // the array to store dirs
    $path = realpath($dir);

    $dirs = new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS);
    $objects = new RecursiveIteratorIterator($dirs, RecursiveIteratorIterator::SELF_FIRST);

    // loop through all objects and store names in dirArray[]
    foreach($objects as $name => $object){
        if($object->isDir() && strpos($object->getBasename(), '.') !== true) {
          $dirArray[] = $name;
          echo "test: " . $object->getBasename() . "\n";
        }
    }

    print_r($dirArray);
}

test('/some/dir');

?>

Этот код почти делает то, что мне нужно. Он возвращает все уникальные dirs, но включает в себя те, у кого есть. в названии пути.

Теги:
directory
arrays
recursion

1 ответ

1
Лучший ответ

Просто добавьте еще одну проверку внутри и попытайтесь использовать ->getPathname() вместо:

if($object->isDir() && strpos($object->getPathname(), '.') === false) {
    // do some stuff
}

Это просто означает, что если это каталог И если pathname не содержит этого .

  • 0
    почему бы не !== true работа?
  • 1
    @jml Нет, это никогда не сравнится с истиной. его либо 0-n или false . позиции 0 - to whatever number если он существует. false если не найден

Ещё вопросы

Сообщество Overcoder
Наверх
Меню