2012-06-26 57 views
0

我想從文本文件中找到關鍵字,當找到關鍵字時,我爲每場比賽提供1分。下面的程序有效地計算得分,但不會將得分從高到低排序。請爲我提供解決此問題的方法。PHP沒有按預期排序

下面是代碼:

  <?php 
       $lines = file("Abstract.txt"); 
       $Result = array(); 
       $index = 0; 
       $search_term1= "Tamoxifen"; 
       $search_term2="Doxorubicin"; 
       $search_term3="Synergistic"; 
       $search_term4="MCF-7"; 
       $search_term5="Inhibition"; 


     $keywords = array($search_term1, $search_term2, $search_term3); 
     $replace_keyword = array("<b>".$search_term1."</b>", "<b>".$search_term2."</b>", "<b>".$search_term3."</b>"); 

     foreach ($lines as $line_num => $line) 
     { 
      if($line_num > 1) 
       { 
       $arr = explode("\t", $line); //Reads tab separated file 
       $Pubmed = trim((string)$arr[0]); //first column is Pubmed 
       $title = trim((string)$arr[1]); //second column is title 
       $abstract = trim((string)$arr[2]); //third column is abstract 
       $score = substr_count(strtoupper($title), strtoupper($search_term1)) + substr_count(strtoupper($abstract), strtoupper($search_term1)); //counts occurrence of 1st string in title & abstract 
       $score += (substr_count(strtoupper($title), strtoupper($search_term2)) + substr_count(strtoupper($abstract), strtoupper($search_term2))); //counts occurrence of 2nd string in title & abstract 
       $score += (substr_count(strtoupper($title),strtoupper($search_term3)) + substr_count(strtoupper($abstract), strtoupper($search_term3))); //counts occurrence of 3rd string in title & abstract 


       //store the result as well as data into array 
        $Result[$index]["Pubmed"] = $Pubmed; 
        $Result[$index]["<BR>score"] = $score; 
        $Result[$index]["<BR>title"] = str_ireplace($keywords, $replace_keyword, $title); 
        $Result[$index]["<BR>abstract"] = str_ireplace($keywords, $replace_keyword, $abstract); 
        $index++; 
       } 
     } 


      //sort the array by score 
      $sorter=array(); 
      $ret=array(); 
      reset($Result); 
      $key = "score"; 
      foreach ($Result as $ii => $va) { 
      $sorter[$ii]=$va[$key]; 
     } 
      arsort($sorter); 
      foreach ($sorter as $ii => $va) { 
      $ret[$ii]=$Result[$ii]; 
     } 
      $Result=$ret; 

      foreach($Result as $instance) 
     { 
      $keys = array_keys($instance); 
       foreach($keys as $key) 
       { 
        if(!strcmp($key,"abstract")) 
        echo "\n<b>".$key."</b> : ".$instance[$key]."\n"; 
       else 
       echo "<b>".$key."</b> : ".$instance[$key]."\n"; 
     } 
       echo "\n\n_________________________________________________________________________________________________________________________________________________________________________________________________\n\n"; 

     } 



     ?> 
+9

請提供一個*簡單的*代碼,只是*足夠重現問題。 –

+1

結果是什麼樣的,你想讓它看起來像什麼? – jeroen

+0

@ jeroen:我有大約400篇文章,每篇都有Pubmed ID,標題和摘要。我試圖在文章中搜索關鍵詞並計算每場比賽的分數。下面的程序會計算得分,但不會對其進行排序。結果應該是像$ Pubmed
$分
$標題
$摘要,現在這將是所有的400篇文章,我只是希望文章與較高的分數在頂部,然後是較低的分數。 – Mary

回答

4

故障行是: $key = "score";

您保存在比分: $Result[$index]["&lt;BR>score"] = $score;

它應該是: $key = "<BR>score";

+1

哇。這個人可以掃描代碼。 – Smandoli

+0

@Puggan Se:你是一個拯救生命的人。非常感謝 – Mary