2009-04-04 20 views
17
$split_point = ' - '; 
$string = 'this is my - string - and more'; 

$ split_pointの2番目のインスタンスを使用して分割を行うことはできますが、最初の分割を使用することはできません。どういうわけか右から左の検索を指定できますか?ベストシンプルなアプローチ?右から左へ文字列を分解する方法は?

基本的にどのように右から左に爆発しますか?私は " - "の最後のインスタンスを取得したい。

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

及びません:: - 、「とより

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

何を取得したいですか? – SilentGhost

+0

結果: $ item [0] = 'これはマイストリングです'; $ item [1] = '以上'; – Codex73

+0

あなたの配列を爆発させた後: 'this is my'、 'string'、 'and more' –

答えて

26

あなたは、文字列を逆にstrrevを使用して、戻って結果を逆転させることがあります。これはしかし最善の解決策である場合

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

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

わかりません。

+1

Creative!溶液! – Evert

+0

素晴らしい、、、うわー...今私は試してみるよ。 – Codex73

+0

スプリットを使用し、爆発しないのはなぜですか?違いは? – Codex73

4

私が正しく理解していれば、あなたは '文字列これは私である'(あなたを与えるために例のケースをしたい私は必要

結果')?

組み込み分割/爆発は転送専用と思われます。おそらく、strrposを使用して自分で実装する必要があります。 (左右サーチ)

$idx = strrpos($string, $split_point); 
$parts = array(substr($string, 0, $idx), substr($string, $idx+strlen($split_point))) 
2

なぜ、 ' - 'で分割してから、最初に2つの配列エントリを結合して戻ってくるのですか?これについて

+0

は面白いと思う。 – Codex73

+0

しかし、私は最後のインスタンスを常に分割する必要があります - 。 – Codex73

+0

+1、最も簡単な方法 – SilentGhost

12

方法:

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

はどんなゴルフの賞を獲得するつもりはないが、それは意図を示すとうまく動作しますが、私は思います。

+0

utf-8文字列で動作する(例:アラビア語) –

0

あなただけの$ split_pointの最初の発生が無視されるようにしたいと仮定すると、これはあなたのために働く必要があります。これが第二のあなたがした後の$ split_pointの発生毎に分割することができます(を含む)します

# retrieve first $split_point position 
$first = strpos($string, $split_point); 
# retrieve second $split_point positon 
$second = strpos($string, $split_point, $first+strlen($split_point)); 
# extract from the second $split_point onwards (with $split_point) 
$substr = substr($string, $second); 

# explode $substr, first element should be empty 
$array = explode($split_point, $substr); 

# set first element as beginning of string to the second $split_point 
$array[0] = substr_replace($string, '', strpos($string, $substr)); 

$ split_pointの発生。

1

私は同じupponつまずいた、などのようにそれを修正した。ここで

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

$reverse_explode = array_reverse(explode($split_point, $string)); 
5

はそれを行うための別の方法である:

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

$stringpos = strrpos($string, $split_point, -1); 
$finalstr = substr($string,0,$stringpos); 
0
$split_point = ' - '; 
$string = 'this is my - string - and more'; 
$result = end(explode($split_point, $string)); 

これは

1
正常に動作しています

私はMoffの答えが好きでしたが、要素の数を2に制限し、配列を再度反転することで改善しました:

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

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

次に$結果は以下のようになります。

Array ([0] => this is my - string [1] => and more) 
2

これは私の - 文字列 - と、より

  1. 一般的な使用は、すべての文字列
  2. ははsizeof配列をゲットするための関数を爆発します最後の項目を取得します
  3. ポップ最後の項目を使用してrray_pop機能。
  4. Implode残りの文字列と同じdelimeter(他のdelimeterで使用できる場合)

コード

$arrSpits=explode("", "this is my - string - and more"); 
$arrSize=count($arrSpits); 

echo "Last string".$arrSpits[arrSize-1];//Output: and more 


array_pop(arrSpits); //now pop the last element from array 

$firstString=implode("-", arrSpits); 
echo "First String".firstString; //Output: this is my - string 
関連する問題