@Error202
PHP программист

Как сгенерировать относительный путь от одного файла к другому?

Не могу никак придумать алгоритм вычисления относительного пути одного файла к другому

Пример 1:
1. 55/46/21/11/to.txt
2. 55/46/54/18/from.txt
должно получится: ../../21/11/to.txt

Пример 2:
1. 55/to.txt
2. 55/46/54/18/from.txt
должно получится: ../../../to.txt

Пример 3:
1. 55/46/21/11/to.txt
2. 55/from.txt
должно получится: 46/21/11/to.txt

Делаю на PHP
function preparePath($to_path, $from_path): string
{
    $to_parts = explode('/', $to_path);
    $to_file = array_pop($to_parts);

    $from_parts = explode('/', $from_path);
    $from_file = array_pop($from_parts);
    
    $diff = count($from_parts) <= count($to_parts) ? array_diff($to_parts, $from_parts) : array_diff($from_parts, $to_parts);
    $int = count($from_parts) <= count($to_parts) ? array_intersect($to_parts, $from_parts) : array_intersect($from_parts, $to_parts);
    $int_str = count($from_parts) == count($to_parts) ? str_repeat('../', count($int)) : '';
    $diff_str = count($from_parts) <= count($to_parts) ? implode('/', $diff) . '/' : str_repeat('../', count($diff));
   
    return $int_str . $diff_str . $to_file;
}

Но это работает только для указанных выше примеров, нельзя использовать...

Есть простой такой вариант, но пути получаются избыточные
function preparePath($to_path, $from_path): string
{
    $to_parts = explode('/', $to_path);
    $to_file = array_pop($to_parts);

    $from_parts = explode('/', $from_path);
    $from_file = array_pop($from_parts);
    
    $int_str = str_repeat('../', count($from_parts));
    $diff_str = implode('/', $to_parts);
    
    return $int_str . $diff_str . '/' . $to_file;
}


Может есть что-то уже готовое?
  • Вопрос задан
  • 136 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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