我希望在文件中交叉引用字符串中的每个单词。
所以,如果给我一个字符串:Jumping jacks wake me up in the morning.
- 我用一些正则表达式去掉句号。此外,整个字符串都是小写的
- 然后,我使用PHP漂亮的
explode()
函数将单词分隔成一个数组 - 现在,我剩下的是一个数组,其中包含字符串中使用的单词
从那里我需要查找数组中的每个值,并为其获取一个值,然后将其添加到一个运行和中。是for()
循环。好吧,这就是我被卡住的地方。。。
列表($wordlist
)的结构如下:
wake#4 waking#3 0.125
morning#2 -0.125
单词和数字之间有t
。每个值可以有一个以上的单词。
我现在需要PHP查找数组中每个单词的数字,然后将相应的数字拉回来,将其添加到一个运行的和中。对我来说,最好的办法是什么?
答案应该很简单,只需在单词列表中找到字符串的位置,然后找到选项卡,然后从那里读取int…我只需要一些指导。
提前谢谢。
编辑:澄清一下——我不想要单词列表的值的总和,相反,我想查找我的个人值,因为它们对应于句子中的单词,然后在列表中查找它们,只添加这些值;不是所有的。
根据您的评论和问题编辑编辑答案。运行总和存储在一个名为$sum的数组中,其中"单词"的键值将存储其运行总和的值。例如$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+)#ds+(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"];
}
我假设你会注意区分大小写,因为你提到你把整个字符串都设为小写,所以这里不包括这一点。
$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()
的情况下,为每个句子循环这个