2

假设用户是否能够选择一些目录进行搜索。他勾选了以下目录:

http://google.com/apple
http://google.com/apple/red
http://google.com/apple/green
http://google.com/apple/yellow
http://google.com/orange
http://google.com/orange/1

当准备好将这些数据插入到数据库中时。有没有办法让我可以通过 PHP 简化列表,以便显示如下内容:

http://google.com/apple
http://google.com/orange

谢谢赛勒斯

4

1 回答 1

1

这应该可以解决问题:

sort( $paths );

$previous = $paths[0];
$simplified = array( $previous );

foreach ( $paths as $path ) {
    if ( $previous != substr( $path, 0, strlen( $previous ) ) ) {
        $simplified[] = $previous = $path;
    }
}

此代码依赖于字符串在其自身的任何扩展之前排序的事实。请注意,它不会以任何特殊方式处理斜杠,因此它认为,比如说,它"quux/foo"是一个有效的前缀"quux/foobar"(这并不像我最初想象的那样容易正确修复)。如果您不希望这样,请确保您的路径在适当的地方有斜杠。

于 2012-12-28T00:12:01.620 回答