3

次のような文字列があります。

Security/Flow_Setup/Steady_State/Verification

最初の 2 つのレベル (例: Security/Flow_Setup ) だけが必要です。これを取得する簡単な方法はありますか? 現在、区切り文字として '/' を使用して文字列を配列に分解し、要素 0 と 1 をつなぎ合わせています。

これは機能しますが、よりエレガントなソリューションを望んでいました。

何かご意見は?

4

5 に答える 5

7

最初の2つの部分だけが必要な場合は、これよりもエレガント/短くなりすぎることはないと思います。

list($var1, $var2) = explode('/', $str);

ここでは正規表現はまったく不要です。

コメントdirnameで言及された誰かが、賢くておそらく適切なアイデアであり、非常に短くて読みやすいと思いました(そして、上記のコードのような2つの別々の部分の代わりに必要な文字列を取得します):

$str = 'Security/Flow_Setup/Steady_State/Verification';

echo dirname(dirname($str));

// Output: Security/Flow_Setup
于 2012-05-14T15:10:23.080 に答える
3

私はあなたがすべてうまくやっていると信じています。必要に応じて、次の方法で試すことができます。

$str = "Security/Flow_Setup/Steady_State/Verification";
echo substr($str, 0, strpos($str, '/', strpos($str, '/') + 1));

(配列は関係ありません。少し速くなるはずです)

于 2012-05-14T15:12:47.147 に答える
2

典型的な使用法でも文字列関数でもありませんが、文字列は事実上パスであるため、おそらくこれで十分です...

dirname(dirname('Security/Flow_Setup/Steady_State/Verification'));
于 2012-05-14T16:18:03.487 に答える
1

これが、私が思いつくことができる最も短くて最も効率的なワンライナーです。

$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
于 2012-05-14T15:23:24.773 に答える
0

この正規表現はそれを行う必要があります

'/^([a-zA-Z]+\/[a-zA-Z]+)?/'
于 2012-05-14T15:11:14.653 に答える