2014-10-19 164 views
0

我試圖做什麼? 我嘗試做代碼來發現是否有重複的數據到數據庫中,數據是否是文本內容由用戶編寫。 所以我讓sql查詢從數據庫中獲得行pagetext的結果,並從任何符號和座標(字體顏色,字體大小和字體類型)和圖像鏈接或任何鏈接清理它,並且我也爲變量$post['message']文本區域的內容.. 比我檢查是否$post['message']的內容相同pagetext的內容與否!從mysql查詢結果php數組

全碼:

// FUNCTION TO CLEAN TEXT 
function stripBBCode($text_to_search) 
{ 
$pattern = '|[[\/\!]*?[^\[\]]*?]|si'; 
$replace = ''; 
return preg_replace($pattern, $replace, $text_to_search); 
} 

// MYSQL QUERY 
$ckeck = $db->query_read(" SELECT pagetext FROM " . TABLE_PREFIX . " post "); 
$ckeck_num = mysql_num_rows($ckeck); 

      while ($ckeckpagetext = $db->fetch_array($ckeck)) 
      { 

// RESULT FROM QUERY - here i try to make ARRAY BY [square brackets] 
$pagetext[] = stripBBCode($ckeckpagetext['pagetext']); 
$pagetext[] = preg_replace('/[\s]+/mu','', $pagetext); 
$pagetext[] = preg_replace('/\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i', '', $pagetext); 

// Variable 
$message = stripBBCode($post['message']); 
$message = preg_replace('/[\s]+/mu','',$message); 
$message = preg_replace('/\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i', '', $message); 

// LOOP 
for($x=0; $x<$ckeck_num; $x++) 
{ 
// CHECK IF THERE duplicate TEXT OR NOT 
if ($message == $pagetext[$x]) 
{ 
$ckeck_duplicate = 1; 
}else{ 
$ckeck_duplicate = 2; 
    } 
     } 
      } 

我的問題? 我的代碼幾乎正確,但我的問題在這些行[方括號]。當我爲我的結果

// RESULT FROM QUERY 
$pagetext[] = stripBBCode($ckeckpagetext['pagetext']); 
$pagetext[] = preg_replace('/[\s]+/mu','', $pagetext); 
$pagetext[] = preg_replace('/\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i', '', $pagetext); 

,如果我只用第一線,而不使用preg_replace嘗試大陣代碼工作良好。 當我使用[方括號]爲

$pagetext[] = stripBBCode($ckeckpagetext['pagetext']); 
+0

你可能想看看這個問題。 http://stackoverflow.com/questions/26449506/php-extracting-string-between-two-tags-by-childs-content – addicted20015 2014-10-19 10:33:17

+0

@ addicted20015我會看看它現在thnx – 2014-10-19 10:45:38

+0

@ addicted20015,這不是我想..事實上,遠離我想要做的事 – 2014-10-19 10:47:35

回答

0
$pagetext = array(); 
    while ($ckeckpagetext = $db->fetch_array($ckeck))  
    { 
     $tmpCheckPageText = stripBBCode($ckeckpagetext['pagetext']); 
     $tmpCheckPageText = preg_replace('/[\s]+/mu','', $tmpCheckPageText); 
     $tmpCheckPageText = preg_replace('/\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i', '', $tmpCheckPageText); 
     $pagetext[] = $tmpCheckPageText; 
    } 

和數組是:

$pagetext = array('Plain text1', 'Plain text2'); 
+0

thnx但它不工作太..也許'for()'循環可以工作嗎?(for $($ i = 0; $ i <$ ckeck_num; $ i ++){}'並在它上面循環'preg_replace' $ pagetext [$ i]'和ch eck by if($ message == $ pagetext [$ i])',你怎麼看? – 2014-10-20 16:21:05

+1

是作品!告訴我:'var_dump($ pagetext);'檢查這個數組。如果這是你想要的東西你擁有你所需要的一切。下一步是使用'in_array()'函數和'$ message'變量進行檢查。 – 2014-10-20 17:20:50

+0

是的,實際上,我很抱歉.. 這個問題是另一回事,一個編碼,內容變量'$ post ['message']'用阿拉伯語寫,所以檢查不工作或不發現重複的內容。 我使用'iconv()'來解決問題''message = iconv(「windows-1256」,「UTF-8」,$ post ['message']);'thnx brother – 2014-10-21 02:11:30

0

試試你的功能stripBBCode可變的preg_replace例如$ tmpCheckPageText並在此之後放入數組$ pagetext

代碼:

$tmpCheckPageText = stripBBCode($ckeckpagetext['pagetext']); 
$tmpCheckPageText = preg_replace('/[\s]+/mu','', $tmpCheckPageText); 
$tmpCheckPageText = preg_replace('/\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i', '', $tmpCheckPageText); 
$pagetext[] = $tmpCheckPageText; 

更新:

從數據庫中使用SQL語句來創建pagetext的陣列和清除它在while循環。例如,你有這樣的:

$pagetext = array('Purge Text 1', 'Purge Text 2', 'Purge text 3'); 

在此之後,清除你的後場$消息。接下來檢查in_array函數。

echo in_array($message, $pagetext) ? 1 : 2; 
+0

我現在嘗試一個好主意 – 2014-10-19 11:01:43

+0

soory,不工作:( – 2014-10-19 11:06:56

+0

檢查我的更新 – 2014-10-19 11:19:49