2012-06-26 40 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