19
$split_point = ' - ';
$string = 'this is my - string - and more';

最初のインスタンスではなく、2 番目のインスタンスを使用して分割するにはどうすればよいです$split_pointか。どうにかして右から左への検索を指定できますか?

基本的に、右から左に爆発する方法を教えてください。「 - 」の最後のインスタンスだけをピックアップしたい。

私が必要とする結果:

$item[0]='this is my - string';
$item[1]='and more';

ではない:

$item[0]='this is my';
$item[1]='string - and more';
4

13 に答える 13

31

strrevを使用して文字列を逆にし、結果を元に戻すことができます。

$split_point = ' - ';
$string = 'this is my - string - and more';

$result = array_map('strrev', explode($split_point, strrev($string)));

ただし、これが最善の解決策であるかどうかはわかりません。

于 2009-04-04T16:25:36.063 に答える
12

これはどう:

$parts = explode($split_point, $string);
$last = array_pop($parts);
$item = array(implode($split_point, $parts), $last);

ゴルフ賞を受賞するつもりはありませんが、意図を示しており、うまく機能していると思います。

于 2009-04-04T16:49:50.157 に答える
7

これを行う別の方法を次に示します。

$split_point = ' - ';
$string = 'this is my - string - and more';

$stringpos = strrpos($string, $split_point, -1);
$finalstr = substr($string,0,$stringpos);
于 2012-04-20T09:12:54.530 に答える
4

私の理解が正しければ、例のケースで (「これは私の - 文字列です」、「その他」) が得られますか?

組み込みの split/explode は forwards-only のようです - おそらく strrpos で自分で実装する必要があります。(左右サーチ)

$idx = strrpos($string, $split_point);
$parts = array(substr($string, 0, $idx), substr($string, $idx+strlen($split_point)))
于 2009-04-04T16:25:34.880 に答える
2

「 - 」で分割してから、最初の 2 つの配列エントリを結合して元に戻すのはなぜですか?

于 2009-04-04T16:33:32.207 に答える
1

私は同じことに出くわし、次のように修正しました:

$split_point = ' - ';
$string = 'this is my - string - and more';

$reverse_explode = array_reverse(explode($split_point, $string));
于 2011-07-15T10:28:46.980 に答える
1

私はモフの答えが好きでしたが、要素の数を2に制限し、配列を逆にすることで改善しました:

$split_point = ' - ';
$string = 'this is my - string - and more';

$result = array_reverse(array_map('strrev', explode($split_point, strrev($string),2)));

$result は次のようになります。

Array ( [0] => this is my - string [1] => and more )
于 2015-07-09T08:04:50.440 に答える