如何判断路径是否是新路径的子集?

时间:2018-04-30 14:53:42

标签: php

我想将包含其所有内容的旧文件夹移动到另一个新文件夹,但是,我要检查新文件夹目标是否包含旧文件夹目标,否则我试图将文件夹移动到自身这是不可能的。

我想检查旧路径是否已经是新路径的子集。

类似的东西:

check_function( "folder/test" , "folder/test/test2"); //true
check_function( "folder/test/" , "folder/test/test2"); //true

check_function( "folder/test" , "folder/test2"); //false
check_function( "folder/test" , "folder/test2/test3"); //false

我该怎么做?

2 个答案:

答案 0 :(得分:1)

<?php

function sanitize(string $path): string
{
    return trim(trim($path), "/");
}

function check(string $path1, string $path2): bool
{
    $path1 = sanitize($path1);
    $path2 = sanitize($path2);

    $pathsElem1 = explode("/", $path1);
    $pathsElem2 = explode("/", $path2);

    foreach ($pathsElem1 as $i => $item) {
        if (!array_key_exists($i, $pathsElem2)) {
            return false;
        }

        if ($pathsElem2[$i] !== $item) {
            return false;
        }
    }

    return true;
}

$testCases = [
    check("folder/test", "folder/test/test2"),
    check("folder/test/", "folder/test/test2"),
    check("folder/test", "folder/test2"),
    check("folder/test", "folder/test2/test3"),
];

var_dump($testCases);

输出:

array(4) {
  [0]=>
  bool(true)
  [1]=>
  bool(true)
  [2]=>
  bool(false)
  [3]=>
  bool(false)
}

答案 1 :(得分:-1)

检查字符串是否有/作为最后一个字符。如果没有,请追加它。

然后检查第二个字符串是否以第一个字符串开头。

以下是一些startsWithendsWith函数可供帮助:

startsWith() and endsWith() functions in PHP