我有一个如下所示的字符串:
Security/Flow_Setup/Steady_State/Verification
我只需要前两个级别(例如Security/Flow_Setup)有没有更简单的方法来获得这个。目前我将字符串分解为一个数组,使用:'/' 作为分隔符,然后将元素 0 和 1 拼凑在一起。
这可行,但我希望有一个更优雅的解决方案。
有什么想法吗?
我有一个如下所示的字符串:
Security/Flow_Setup/Steady_State/Verification
我只需要前两个级别(例如Security/Flow_Setup)有没有更简单的方法来获得这个。目前我将字符串分解为一个数组,使用:'/' 作为分隔符,然后将元素 0 和 1 拼凑在一起。
这可行,但我希望有一个更优雅的解决方案。
有什么想法吗?
如果您只需要前两部分,我认为您不会比这更优雅/更短:
list($var1, $var2) = explode('/', $str);
正则表达式在这里完全没有必要。
dirname
有人在评论中提到,我认为这是一个聪明且可能合适的想法,并且非常简短易读(并为您提供所需的字符串,而不是像上面的代码那样的两个单独的部分):
$str = 'Security/Flow_Setup/Steady_State/Verification';
echo dirname(dirname($str));
// Output: Security/Flow_Setup
我相信你做的一切都很好。如果你喜欢,你可以这样尝试:
$str = "Security/Flow_Setup/Steady_State/Verification";
echo substr($str, 0, strpos($str, '/', strpos($str, '/') + 1));
(不涉及数组,应该快一点)
不是典型用法也不是字符串函数,但由于您的字符串实际上是一条路径,也许这就足够了......
dirname(dirname('Security/Flow_Setup/Steady_State/Verification'));
这是我能想到的最短和最有效的单线:
$firstTwoParts = implode('/', array_slice(explode('/', $str, 3), 0, 2));
这可以包装成一个函数,让你控制你想要多少部分:
function first_n_parts ($str, $n, $delimiter = '/') {
return ($n = (int) $n) ? implode($delimiter, array_slice(explode($delimiter, $str, $n + 1), 0, $n)) : '';
}
...所以你可以这样做:
echo first_n_parts($str, 1); // Security
echo first_n_parts($str, 2); // Security/Flow_Setup
echo first_n_parts($str, 3); // Security/Flow_Setup/Steady_State
这个正则表达式应该这样做
'/^([a-zA-Z]+\/[a-zA-Z]+)?/'