2012-01-05 10 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의 단어와 숫자 사이에있다 . 거기 값 당 하나 이상의 단어가 있어야합니다.

PHP가 지금해야 할 일은 배열의 각 단어에 대한 숫자를 찾아 해당 숫자를 다시 계산하여 합계에 더하는 것입니다. 이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

대답은 단어 목록에있는 문자열의 위치를 ​​찾은 다음 탭을 찾고 거기에서 int를 읽는 것만으로도 충분히 쉽습니다 ... 나는 약간의 지침이 필요합니다.

미리 감사드립니다.

수정 : - 단어 목록의 값의 합이 필요하지 않습니다. 오히려 문장의 단어와 일치 할 때 개인 값을 조회하고 싶습니다. 목록에있는 사람들에게 그 값을 추가하십시오. 그들 모두는 아닙니다. 그 단어 같은 낱말 배열의 경우

+0

PHP가 하나의 간단한 함수로 둘 다 수행하는 내장 함수를 가지고있을 때 그 회선 정규 표현식을 사용하고 폭발 시키십시오. 단순히 $ words = str_word_count ($ string, 1); –

+0

마크 베이커, 제 생각 엔 당신의 방법이 효과가 없을 것입니다. 제 잘못이라면 저를 교정하십시오.이것은 Peter가 주어진 예에서 문자열에 숫자와 '#'이 있으며 이는 "단어"문자가 아니기 때문입니다. '단어'로 간주 할 수있는 추가 문자를 언급하려면 str_word_count에서 세 번째 인수를 제공해야합니다. 자세한 내용은 여기에 있습니다 : http://php.net/manual/en/function.str-word-count.php – Ninja

답변

1

귀하의 의견 및 질문을 바탕으로 수정 된 답변을 편집하십시오. 누적 합계는 $ 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+)#\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

@ninja ... 비 배열 객체에서 foreach 루프를 실행할 수 없다는 말은 맞다고 생각합니다. '$ wordlist'는 배열이 아닌 텍스트 파일입니다. 두 번째 줄을보십시오. –

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

값 당 하나 이상의 단어가있을 수 있습니다. 질문을보십시오. 다음 정규 표현식을 찾으려면 정규 표현식이 필요합니다. –