Прочитайте соответствующее значение в PHP и добавьте к текущей сумме - PullRequest
0 голосов
/ 05 января 2012

Я хотел бы, чтобы каждое слово в строке перекрестно ссылалось в файле.

Итак, если бы мне дали строку: 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. может быть более чем одним словом на значение.

Что мне нужно сделать PHP сейчас, так это найти число для каждого слова в массиве, а затем вытянуть это соответствующее число обратно, чтобы добавить его.на текущую сумму.Какой лучший способ для меня это сделать?

Ответ должен быть достаточно простым, просто найти местоположение строки в списке слов, а затем найти вкладку и оттуда читать int ... Я простонужно некоторое руководство.

Заранее спасибо.

РЕДАКТИРОВАТЬ: , чтобы уточнить - я не хочу сумму значений в списке слов, скорее, я 'я хотел бы посмотреть мои индивидуальные значения, как они соответствуют словам в предложении, а затем искать их в списке и добавить только эти значения;не все из них.

Ответы [ 2 ]

1 голос
/ 05 января 2012

Отредактированный ответ на основе вашего комментария и редактирования вопроса.Промежуточная сумма хранится в массиве с именем $ 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 голосов
/ 05 января 2012
$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;
  }

}

пробел, проверьте, находится ли это слово в массиве слов как key ;если это так, увеличивайте его количество ( val );если нет, установите значение val равным 1. Зацикливайте это для каждого из ваших предложений без повторного выделения $ words = array ()

...