2012-02-13 2 views
0

このphp関数は、文字列で使用される一般的な単語のリストを取得し、単語のブラックリストを除外します。2つの配列をマージした後でPHPのキーワード関数が壊れる

ARRAY1:A、B、

Cデフォルトのブラックリストは、私は、データベースからブラックリストに単語を追加するために必要な、便利ではあるが。

配列2:

F D、Eは、私たちのサービステーブル内のフィールドから追加のリストを取得しMYSQLを追加しました。 I爆発\ n個の単語からアレイへとブラックリストが今

ARRAY3なるように関数の先頭にある2つの配列をマージ:TO

F、A、B、C、D、Eテスト私はprint_rを使って配列を表示し、それは正常にマージします。スクリプトは言葉のクリーンなリストを返すデフォルトの配列にfを、私は手動で、D、Eを追加した場合

問題が...

これです。 2つの配列を1つにマージして、その中にまだブラックリスト単語がある単語のリストを返します。

なぜ、マージされた配列がデフォルトの配列に追加するだけの違いはありますか?ここで

は、関数は、データベース内の余分なブラックリストは、Windowsクライアントから管理パネルに移入された場合は、各単語の末尾に浮遊する\ rをする可能性があり

function extractCommonWords($string,$init_blacklist){ 

    /// the default blacklist words 
    $stopWords = array('a','b','c'); 

    /// select the additional blacklist words from the database 
    $gettingblack_sql = "SELECT g_serv_blacklist FROM services WHERE g_serv_id='".$init_blacklist."' LIMIT 1"; 
    $gettingblack_result = mysql_query($gettingblack_sql) or die(mysql_error()); 
    $gettingblack_row = mysql_fetch_array($gettingblack_result); 
    $removingblack_array = explode("\n", $gettingblack_row["g_serv_blacklist"]); 

    // this adds the d,e,f array from the database to the default a,b,c blacklist 
    $stopWords = array_merge($stopWords,$removingblack_array); 

    // replace whitespace 
    $string = preg_replace('/\s\s+/i', '', $string); 
    $string = trim($string); 

    // only take alphanumerical chars, but keep the spaces and dashes too 
    $string = preg_replace('/[^a-zA-Z0-9 -]/', '', $string); 

    // make it lowercase 
    $string = strtolower($string); 

    preg_match_all('/\b.*?\b/i', $string, $matchWords); 
    $matchWords = $matchWords[0]; 

    foreach ($matchWords as $key => $item) { 
    if ($item == '' || in_array(strtolower($item), $stopWords) || strlen($item) <= 3){ 
    unset($matchWords[$key]);}} 

    $wordCountArr = array(); 

    if (is_array($matchWords)) { 
     foreach ($matchWords as $key => $val) { 
      $val = strtolower($val); 
      if (isset($wordCountArr[$val])) { 
       $wordCountArr[$val]++; 
      } else { 
       $wordCountArr[$val] = 1; 
      } 
     } 
    } 
    arsort($wordCountArr); 
    $wordCountArr = array_slice($wordCountArr, 0, 30); 
    return $wordCountArr; 
} 
/// end of function 



    /// posted string = a b c d e f g 
    $generate = $_POST["generate"]; 

    /// the unique id of the row to retrieve additional blacklist keywords from 
    $generate_id = $_POST["generate_id"]; 

    /// run the function by passing the text string and the id 
    $generate = extractCommonWords($generate, $generate_id); 

    /// update the database with the result 
    $update_data = "UPDATE services SET 
    g_serv_tags='".implode(',', array_keys($generate))."' 
    WHERE g_serv_acct='".$_SESSION["session_id"]."' 
    AND g_serv_id='".$generate_id."' LIMIT 1"; 
    $update_result = mysql_query($update_data); 
    if(!$update_result){die('Invalid query:' . mysql_error());} 
    else{echo str_replace(",",", ",implode(',', array_keys($generate)));} 
    /// end of database update 
+2

マージされた配列と "ノーマル" の配列の間に違いはありません。配列のマージはあなたの問題ではないと思います。 'var_dump($ stopWords)'をここに投稿すると、このコードが何を処理しているかを見ることができます。 – deceze

+0

配列はkey> valと同じように見えます。ブラウザに戻って必要な方法で探していました。 \ rは問題だった。ご支援ありがとうございます。 – Natrix

答えて

1

です。したがって、リストはa、b、c、d \ r、e \ r、f \ rになります。

は、このラインを交換してみてください:

これで
$removingblack_array = explode("\n", $gettingblack_row["g_serv_blacklist"]); 

$removingblack_array = preg_split('/(\r|\n|\r\n)/', $gettingblack_row["g_serv_blacklist"]); 
+0

テスト済み&完璧! – Natrix

関連する問題