php.de

Zurück   php.de > php.de Intern > Wiki Diskussionsforum > Tutorials

Tutorials Hier findest Du Tutorials, welche nach und nach ein fertiges Script ergeben. Sehen, lernen & verstehen!

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 03.02.2008, 19:20  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard PHP: Pfadüberschneidungen

Hallo,

falls der ein oder andere es mal benötigen sollte, dieses Skript prüft, ob zwei übergebene Pfade Überschneidungen haben, wenn man sie zusammenschiebt. Algorithmisch so gelöst, path1 pro Schleifendurchlauf ein vorderer Pfad entfernt wird, path2 ein hinterer und diese Reste dann einfach per einfachem Array-Vergleich (==) verglichen werden.

Im Fehlerfall oder wenn einer der Pfade leer ist, wird false zurückgeliefert.

PHP-Code:
<?php
/**
 * returns the path intersection between the two given paths
 * path2 is moved from left to right until the pattern matches
 * 
 * @example
 * i = 0    :
 * path1cut : path1/path2/path3
 * path2cut : path2/path3/path4
 * result   : fail
 * 
 * i = 1    :
 * path1cut : path2/path3 [left path removed]
 * path2cut : path2/path3 [right path removed]
 * result   : hit
 * 
 * So the intersection between "path1/path2/path3" and
 * "path2/path3/path4" is "path2/path3".
 * 
 *
 * @param string $path1 left path (f.e. an absolute path)
 * @param string $path2 right path (f.e. a relative path)
 * @param char $outputSeparator the matched path intersection will be concatenated with this char
 * @return string|bool false in case of no intersection or empty path
 */
function getPathIntersection($path1$path2$outputSeparator "/")
{
    if (
DIRECTORY_SEPARATOR != "/") {
        
$path1 str_replace(DIRECTORY_SEPARATOR"/"$path1);
        
$path2 str_replace(DIRECTORY_SEPARATOR"/"$path2);
    }
    
$path1 trim($path1"/");
    
$path1Splitter explode("/"$path1);
    
    
$path2 trim($path2"/");
    
$path2Splitter explode("/"$path2);
    
    if (empty(
$path1) || empty($path2)) {
        return 
false;
    }
    
    for (
$i 0$x count($path1Splitter); $i $x; ++$i) {
        
$path1SplitterCut array_slice($path1Splitter$i);
        
$path2SplitterCut array_slice($path2Splitter0$x $i);
                
        if (
$path1SplitterCut == $path2SplitterCut) {
            return 
implode($outputSeparator$path1SplitterCut);
        }
    }
    
    return 
false;
}

/*
assert(getPathIntersection("", "") === false);
assert(getPathIntersection("path1", "") === false);
assert(getPathIntersection("", "path1") === false);
assert(getPathIntersection("path2", "path1/path1") === false);
assert(getPathIntersection("path1/path2/path3", "path1/path2") === false);
assert(getPathIntersection("path1", "path1") === "path1");
assert(getPathIntersection("path1/path2", "path2/path1") === "path2");
assert(getPathIntersection("path1/path2", "path1/path2") === "path1/path2");
assert(getPathIntersection("path1", "path1/path2") === "path1");
assert(getPathIntersection("path1/path2", "path2") === "path2");
assert(getPathIntersection("path1/path2", "path2/path3/path4") === "path2");
assert(getPathIntersection("path1/path1/path1/path2", "path1/path1/path2/path2/path3") === "path1/path1/path2");
assert(getPathIntersection("path1/path2/path3/path2/path3", "path2/path3/path2/path3/path4") === "path2/path3/path2/path3");
assert(getPathIntersection("path1/path2", "path1/path2/path3") === "path1/path2");
*/
?>
Zergling-new ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 05.02.2008, 03:36  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.994
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Oh man, da muß erst dieses Tutorial kommen um mir zu zeigen, dass es für trim nen zweiten Parameter gibt! Das hätte ich schon Jahre gebrauchen können *kopfklatsch*

- Statt der array_slice's könntest Du übrigens auch array_shift () und array_pop () verwenden

- Ich sehe allerdings noch keinen rechten Sinn hinter der Funktion. Pfadangaben sind ja nicht eindeutig, wenn sich bspw. in verschachtelten VZ Strukturen Elemente wiederholen:

Im Vergleich lib/append/module1/lib und /lib/more gibt die Funktion zwar richtig lib/ aus, denkbar wären aber zwei Strukturen:

Code:
lib\
  +append\
    +module1\
      +lib\
        +more\
oder

Code:
lib\
  +append\
    +module1\
      +lib\ 
  +more\
nikosch ist offline   Mit Zitat antworten
Alt 05.02.2008, 10:12  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Zitat:
Zitat von nikosch77
- Ich sehe allerdings noch keinen rechten Sinn hinter der Funktion. Pfadangaben sind ja nicht eindeutig, wenn sich bspw. in verschachtelten VZ Strukturen Elemente wiederholen:

Im Vergleich lib/append/module1/lib und /lib/more gibt die Funktion zwar richtig lib/ aus, denkbar wären aber zwei Strukturen:
Jein, prinzipiell hast du Recht. Ich hab das ganze gebraucht, um an den relativen Projektpfad ranzukommen. Sprich wenn ein Projekt mal nicht im DOCUMENT_ROOT liegt. Habs jetzt aber etwas anders gelöst.
Zergling-new ist offline   Mit Zitat antworten
Alt 18.05.2011, 11:21  
Neuer Benutzer
 
Registriert seit: 18.05.2011
Beiträge: 8
PHP-Kenntnisse:
Anfänger
erdbeereis6 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Kann man damit auch die Links verstecken, das Sie von Suchmaschinen nicht bewertet werden?

Geändert von Asipak (24.05.2011 um 17:13 Uhr). Grund: Signatur entfernt (unerwünschte Werbung)
erdbeereis6 ist offline   Mit Zitat antworten
Alt 20.05.2011, 00:53  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.994
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Kauf Dir lieber noch ein Eis
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php directory_separator, directory_separator php, php pfade vergleichen, phpstring intersect, directory_separator, http://www.php.de/tutorials/45437-php-pfadueberschneidungen.html, php string intersection, php pfad vergleichen, php pfadangaben, pfade in php, php intersect string, php string intersect, php pfadüberschneidungen, php string überschneidung, pfadangaben php, php intersect vergleichen, str_replace(directory_separator,\'/\',, php dateipfade vergleichen, php pfad, php pfad mit teil pfad vergleichen

Alle Zeitangaben in WEZ +2. Es ist jetzt 02:17 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.