Создание рекурсивного удаляет функцию (в php)

Вот соглашение. У меня есть "дерево" или "поддерево", в котором я хочу переместиться и удалить каждый элемент. Каждый "узел" может содержать ссылки на другие узлы ниже его (без проблем) ИЛИ может содержать ссылки ВНЕ того конкретного "дерева" / "поддерево". Как я могу создать функцию, которая только удаляет "в" указанном дереве?

6
задан Alex 24 June 2010 в 10:51
поделиться

3 ответа

вам нужен RecursiveIterator

0
ответ дан 17 December 2019 в 22:10
поделиться

Вам нужно использовать realpath():

function DeleteTree($path)
{
    if (is_dir($path) === true)
    {
        $path = realpath($path);
        $files = array_diff(scandir($path), array('.', '..'));

        foreach ($files as $file)
        {
            $file = realpath($path . '/' . $file);

            // file is within tree
            if (substr($file, 0, strlen($path)) == $path)
            {
                DeleteTree($file);
            }
        }

        return rmdir($path);
    }

    else if (is_file($path) === true)
    {
        return unlink($path);
    }

    return false;
}

Вышеприведенное должно сделать то, что вы ищете.


О... Я только что понял, что это может быть не связано с файловой системой... Виноваты только вы! :P

0
ответ дан 17 December 2019 в 22:10
поделиться

Это то же рекурсивное удаление, к которому вы привыкли. Вам просто нужно держать ваши ссылки разделенными - один список для ссылок в дереве, один для ссылок вне дерева. В качестве альтернативы у вас может быть флаг, который отслеживает состояние в дереве / вне дерева для каждой ссылки, но вам нужно будет различать, когда вы создаете ссылку.

1
ответ дан 17 December 2019 в 22:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: