2012-07-24 106 views
0

有一些話題縮小了我的問題,但沒有人允許我解決它。我有一個csv文件的術語,我想從中計算表中的數字我的數據庫並將結果寫入新的CSV文件。 我需要創建一個新的數組,其中每個鍵將是第一個數組的一個項,並且該值將是我數據庫中記錄的相關數量。 這裏是輸入的一些例子:創建其數組的鍵和值取決於其他數組

乳糖

絲氨酸

,我希望得到的東西是這樣的:

乳糖,25

絲氨酸,3

所以我創建了一個數組,其值是csv文件中的術語。 然後我在sql查詢中輸入這個數組的值。 然後,我一直無法找到正確的方式在互聯網上或在PHP文檔。最後一行完全失敗了,但我試過了,因爲它似乎是管理我的任務的更窄的意思。

有人可以幫助我嗎?

在此先感謝!

$termslist= array(); 

$file = fopen('fileterms.csv', 'r'); 
while (($line = fgetcsv($file)) !== FALSE) { 
//$line is an array of the csv elements 
    foreach ($line AS $molindice => $molvalues) 
    { 
    if (! in_array($molvalue, $termslist)) 
      {array_push($termslist, $molvalues);} 
    } 
} 

fclose($file); 


//print_r ($termslist); 

$molnumbers = array(); 

foreach ($termslist as $ancientkey => $ancientvalue) 
{ 
    echo $ancientvalue; 
    $sql3 = "SELECT content from mols WHERE content like '% $ancientvalue %'"; 
    $result3 = mysql_query($sql3)or die(mysql_error()); 
    $count3 = mysql_num_rows($result3); 
    echo $count3; 
    $molnumbers [$ancientvalue['molnames']] = $count3['quantities']; 
} 

回答

0

在行:

if (! in_array($molvalue, $termslist)) 
01在此行

if (! in_array($molvalues, $termslist)) 

然後:

你有一個小錯誤,因爲它應該是

$molnumbers [$ancientvalue['molnames']] = $count3['quantities']; 

$ ancientvalue已經是值(或molname)本身,而不是通過自身的數組。 因此,線僅需要:

$molnumbers [$ancientvalue] = $count3['quantities']; 

那麼它應該把數到陣列的正確部分。 對於SQL本身:

$sql3 = "SELECT content from mols WHERE content like '% $ancientvalue %'"; 

這在我看來,您正在尋找%BLANKancientvalueBLANK%,如果這是不是你想要的 在那裏做,而是去找%ancientvalue%,您應該修改line to:

$sql3 = 'SELECT content from mols WHERE content like \'%'.$ancientvalue.'%\''; 
+0

謝謝你們兩位!我根據你的意見改變,我立即測試 – user1474018 2012-07-24 11:28:53

0

變化:

$molnumbers [$ancientvalue['molnames']] = $count3['quantities']; 

要:

$molnumbers[$ancientvalue['molnames']] = $count3['quantities']; 

或者:

$molname = $ancientvalue['molnames']; 
$molnumbers[$molname] = $count3['quantities'];