简化目录列表

时间:2012-12-27 23:47:45

标签: php algorithm

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

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

由于 赛勒斯

1 个答案:

答案 0 :(得分: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"的有效前缀(这并不像我原先想象的那样容易修复这将是)。如果您不想这样做,请确保您的路径在适当的位置有斜杠。