PHP: gemeinsamen Abschnitt zweier sich überlappender Pfade extrahieren

Jörg Kruse

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

Die Kommentarfunktion wurde nach 180 Tagen automatisch geschlossen.
Fragen zu diesem Thema können auch in meinen Webmaster-Forum gestellt werden: