2012-01-05 4 views
0

ファイル内で相互参照される文字列の各単語を持っていたいと思います。だから、PHPで対応する値を読み、実行中の合計に加算する

、私は文字列を与えた場合:Jumping jacks wake me up in the morning.

  1. 私は期間を取り除くためにいくつかの正規表現を使用します。また、文字列全体が小文字になります。
  2. 次に、PHPの気の利いたexplode()関数を使用して、単語を配列に分割します。
  3. ここで私が残しているのは、文字列に使用されている単語の配列です。

そこから、配列の各値を調べ、その値を取得して実行中の合計に追加する必要があります。 for()ループです。さて、これは私が動けなくなるところ($wordlist)...リスト

ではそれほどのように構成されています

wake#4 waking#3 0.125

morning#2 -0.125

単語と番号の間で\t sがあります。 。そこではになります。

PHPが今行う必要があるのは、配列内の各単語の番号を調べ、対応する数値を元に戻して実行中の合計に加算することです。これについて私が行く最善の方法は何ですか?

答えは簡単です。単語リストの文字列の位置を見つけて、タブを見つけて、そこからintを読んで...私はちょっとした指導が必要です。

ありがとうございます。

私は単語リストの値の合計を望んでいません。むしろ、文章中の単語に対応するように個人の値を調べたいと思います。それらの値をリストに追加して値を追加します。それらのすべてではありません。

+0

PHPが組み込みの関数を持っていて、単純な関数で両方を行う場合、その畳み込み正規表現を使用して爆発します。単純に$ words = str_word_count($ string、1);を実行します。 –

+0

Mark Ba​​ker、私の推測ではあなたの方法はうまくいかない、私が間違っていれば私を修正してください。これは、ピーターが与えた例では文字列に数値と '#'があり、これは「単語」文字ではないからです。 '単語'とみなせる追加の文字については、str_word_countに3番目の引数を与えなければなりません。詳細は次のとおりです:http://php.net/manual/en/function.str-word-count.php – Ninja

答えて

1

あなたのコメントと質問に基づいて編集された編集です。実行合計は$ sumという配列に格納されます。ここで、 "word"のキー値には実行中の合計の値が格納されます。例えば、$ sum ['wake']は単語wakeのランニング合計を格納します。あなたは、あなたが文字列全体を小文字にすることを言及しているので、ケース感度の世話をするだろう、そうここにすることを含めておりませんと仮定し

$sum = array(); 
foreach($wordlist as $word) //Loop through each word in wordlist 
{ 
    // Getting the value for the word by matching pattern. 
    //The number value for each word is stored in an array $word_values, where the key is the word and value is the value for that word. 
    // The word is got by matching upto '#'. The first parenthesis matches the word - (\w+) 
    //The word is followed by #, single digit(\d), multiple spaces(\s+), then the number value(\S+ matches the rest of the non-space characters) 
    //The second parenthesis matches the number value for the word 

    preg_match('/(\w+)#\d\s+(\S+)/', $word, $match); 
    $word_ref = $match[1]; 
    $word_ref_number = $match[2]; 
    $word_values["$word_ref"] = $word_ref_number; 

} 

//Assuming $sentence_array to store the array of words used in your string example {"Jumping", "jacks", "wake", "me", "up", "in", "the", "morning"} 

foreach ($sentence_array as $word) 
{ 
    if (!array_key_exists("$word", $sum)) $sum["$word"] = 0; 
    $sum["$word"] += $word_values["$word"]; 
} 

アム。

+0

私がはっきりしていないとすみませんが、残念ですが、私はすべての単一の値を望んでいません...私は私の中の言葉に対応するもの文。リスト自体には500以上の単語があります。 –

+0

質問に対する編集内容に基づいて回答を編集しました。お役に立てれば。 – Ninja

+0

@忍者...私は、配列以外のオブジェクトに対してforeachループを実行できないと言うのは正しいと思います。 '$ wordlist'はテキストファイルであり、配列ではありません。 2行目を参照してください。 –

0
$sentence = 'Jumping jacks wake me up in the morning'; 

$words=array(); 

foreach(explode(' ',$sentence) as $w){ 

    if(!array_key_exists($w,$words)){ 

    $words[$w]++; 

    } else { 
    $words[$w]=1; 
    } 

} 

explodebyスペース、その単語がキーとしての単語列であるかどうかを確認。そうであれば、カウントをインクリメントします(val)。そうでない場合は、valを1に設定します。$ words = array()を再宣言せずに文章ごとにループします。

+0

問題は、単語の番号がリストにあるかどうかを調べなければならないことです。だから私は何とかそれを探し、 '$ init = $ init + $ wordlist [$ i + 1]'の行に沿って何かをしなければならないでしょう。 –

+0

値ごとに複数の単語が存在する可能性があります。質問を参照してください。私は次の '\ t'値を見つけるために正規表現が必要です –

関連する問題