我有一个字符串,看起来像这样:
Security/Flow_Setup/Steady_State/Verification
我只需要前两个级别(例如安全/流程设置)。有没有更简单的方法来获取这个。目前我使用'/'作为分隔符将字符串分解成数组,然后组合元素0和1。
这个方法可以实现,但我希望有一个更优雅的解决方案。
你有什么想法吗?
我有一个字符串,看起来像这样:
Security/Flow_Setup/Steady_State/Verification
我相信你一切都做得很好。如果你愿意,可以尝试以下方法:
$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]+)?/'
dirname()
函数吗?它可以很好地完成你想要的功能,而不需要任何混乱的正则表达式。(在你的情况下,如果你调用它两次) - Spudley