2012-04-17 10 views
0

テキスト文字列をスペースで区切られた単語に分割したいと考えています。 私は残念ながらphp explode()関数のissue - spaces

$words=explode(" ", $text); 

を使用し、私が間にあるどのように多くのスペースを知りたいので、この方法は、私のためにうまく機能しません。

whileステートメントを使用して、$ス​​ペース、シンボルでシンボル全体を調べるよりも、$スペース($spaces=array();)に整数(スペースの数、ほとんどの場合1です)を記入するよりも良い方法はありますか?テキストを$ words = array()シンボルにシンボルで読み込みますか?

追加の説明です。必要な

$text="Hello_world_____123"; //symbol "_" actually means a space 

$words=("Hello","world","123"); 
$spaces=(1,5); 
+0

正規表現はあなたの友達です。 :) –

+0

ええと... substr_countは上記の例で6を与えます。分割するpreg_split(任意の数)は、文字列を3つの単語に分割します。 6 = 5 + 1、3 + 3はどうやって知ることができますか? – Haradzieniec

答えて

1

は、あなたが何をしようとして行うには多くの方法がありますが、私はおそらくpreg_split()array_map()の組み合わせを選ぶだろう:

$text = 'Hello world  123'; 
$words = preg_split('/\s+/', $text, NULL, PREG_SPLIT_NO_EMPTY); 
$spaces = array_map(function ($sp) { 
    return strlen($sp); 
}, preg_split('/\S+/', $text, NULL, PREG_SPLIT_NO_EMPTY)); 

var_dump($words, $spaces); 

出力:

array(3) { 
    [0]=> 
    string(5) "Hello" 
    [1]=> 
    string(5) "world" 
    [2]=> 
    string(3) "123" 
} 
array(2) { 
    [0]=> 
    int(1) 
    [1]=> 
    int(5) 
} 
+0

それはエレガントでコンパクトです。私はそれが速いと信じています。できます。ありがとうございました。 – Haradzieniec

2

を代わりに正規表現を使用してください:

$words = preg_split('/\s+/', $text) 

EDIT

$spaces = array(); 
$results = preg_split('/[^\s]+/', $text); 
foreach ($results as $result) { 
    if (strlen($result) > 0) { 
    $spaces [] = strlen($result); 
    } 
} 
+0

彼はスペースの数だけ必要です。 – Ozzy

+0

これはOPの質問にどのように答えますか? – webbiedave

+0

「私は文字列を空白で区切られた単語に分割したいですか?」 – Tchoupi

0

あなたはまだスペース、iの数を取得することができますこのようにして:

$words = explode(" ", $text); 
$spaces = sizeof($words)-1; 

あなたのために働くことはありませんか?

+0

ありがとうございます、しかし、単語の各対まったく、スペースの合計数を言うわけでもありません。 – Haradzieniec

+0

@ Haradzieniec私はあなたが各単語を分割したいと思った?どのような言葉にはスペースがありますか? :/空白の数は$スペース '(配列の単語の数-1)' – Ozzy

+0

私は説明を質問に入れます。ありがとうございました。 – Haradzieniec