PHP 两个字符串的交集(服务器目录路径和url路径)

我有一种情况,我需要找到服务器目录路径和项目所基于的公共路径之间的重叠。


$dir = '/server/home/this/directory/to/public/my_app/';

$uri = '/my_app/home/script.php';

我四处寻找答案并找到了部分解决方案。


我可以用'/'分割字符串并创建数组,然后使用array_intersect(),但是我得到了这个......


$dir_array = array_filter(explode('/', 'a/e/c/d/'));

$url_array = array_filter(explode('/', 'd/e'));

print_r( array_intersect($dir_array, $url_array) );

// Array ( [1] => e [3] => d )

我不想包含“home”文件夹,因为它不在 URI 中。


白衣染霜花
浏览 251回答 2
2回答

湖上湖

这是我的方法。我还没有测试它是否比@Adam 的更快,但我认为它看起来更干净。$dir = $_SERVER['SCRIPT_FILENAME'];$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);$intersection = implode('/',    call_user_func_array('array_intersect',        array_map(function($a) {            return explode('/', $a);        },            [$dir, $uri])    ));$uri_result = substr($request_uri, strlen($intersection));

神不在的星期二

所以我想出了一个答案:$dir_a = array_filter(explode('/', __DIR__));$url_a = array_filter(explode('/', $uri));$base_public_folder = '';foreach ($url_a as $url_key => $url_f) {    foreach ($dir_a as $dir_key => $dir_f ) {        $next_url_f = !empty($url_a[($url_key + 1)]) ? $url_a[($url_key + 1)] : '';        $next_dir_f = !empty($dir_a[($dir_key + 1)]) ? $dir_a[($dir_key + 1)] : '';        if (            $url_f == $dir_f &&            ($next_dir_f == '' || $next_url_f == $next_dir_f)        ) {            $base_public_folder .= "/".$url_f;            break;        }    }}echo $base_public_folder;// outputs '/my_app'
打开App,查看更多内容
随时随地看视频慕课网APP