この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
マージされた配列と "ノーマル" の配列の間に違いはありません。配列のマージはあなたの問題ではないと思います。 'var_dump($ stopWords)'をここに投稿すると、このコードが何を処理しているかを見ることができます。 – deceze
配列はkey> valと同じように見えます。ブラウザに戻って必要な方法で探していました。 \ rは問題だった。ご支援ありがとうございます。 – Natrix