Jörgs Webnotizen

PHP: gemeinsamen Abschnitt zweier sich überlappender Pfade extrahieren

Aus zwei Pfadangaben, die aufeinander folgen und sich möglicherweise dabei überlappen, wollte ich in PHP den gemeinsamen Pfadabschnitt ermitteln. Aus den Pfadangaben /a/b/c/d und /c/d/e/f sollte beispielsweise der Pfad /c/d extrahiert werden. Die Pfadangaben /g/h/i/j und /i/k/l/m überlappen sich dagegen wegen des fehlenden /j nicht, so dass in dem Fall ein leerer String zurückgegeben werden sollte. Da ich im Netz dazu keine Lösung gefunden habe, habe ich dies folgendermaßen auf etwas umständliche Weise gelöst:


$path_1 = '/eins/zwei/drei/vier/fuenf/sechs/sieben';
$path_2 = '/fuenf/sechs/sieben/acht/neun/zehn';

function get_overlapping_path($path_1, $path_2)
{
    if (empty($path_1) || empty($path_2)) {
        return '';
    }
    $arr_path_1 = explode('/', trim($path_1, '/'));
    $arr_path_2 = explode('/', trim($path_2, '/'));
    $arr_overlay = array();
    foreach ($arr_path_1 as $dir) {
        if ($dir == $arr_path_2[0]) {
            $arr_overlay[] = array_shift($arr_path_2);
        } else {
            if ($arr_overlay) {
                $arr_overlay = array();
                break;
            }
        }
    }
    if ($arr_overlay) {
        return '/' . implode('/', $arr_overlay);
    }
    return '';
}

echo get_overlapping_path($path_1, $path_2);

Ergebnis:

/fuenf/sechs/sieben

Falls jemand einen eleganteren Ansatz kennt, bitte im Kommentar posten bzw. verlinken :-)

Update: Code in Funktion eingebettet

Tags: PHP