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