2015-06-14 119 views
2

現在,我對我的JSON搜索功能工作的特定字值解碼結果只顯示那些包含在陣列

,我得到了看起來像這樣的代碼:

<?php 
foreach($soeg_decoded as $key => $val){ 
    $value = $val["Value"]; 
    $seotitle = $val["SEOTitle"]; 
    $text = $val["Text"]; 

echo '<tr><td>' . $value . '</td><td>' . $seotitle . '</td><td>' . $text . '</td></tr>'; 
} 
?> 

我希望它只是顯示包含特定單詞的結果,這些單詞存儲在名爲$ searchText的變量中。

是否有任何函數或命令可以分離所有結果,並只顯示包含存儲在$ searchText中的單詞的結果。

事情是這樣的:

if($value OR $seotitle OR $text contains $searchText){ 
    echo '<tr><td>' . $value . '</td><td>' . $seotitle . '</td><td>' . $text . '</td></tr>'; 
} 

在此先感謝。

回答

3

您可以使用substr_count()

<?php 
foreach($soeg_decoded as $key => $val){ 
    $value = $val["Value"]; 
    $seotitle = $val["SEOTitle"]; 
    $text = $val["Text"]; 

    if(substr_count($value, $searchText) || substr_count($seotitle, $searchText) || substr_count($text, $searchText)){ 
     echo '<tr><td>' . $value . '</td><td>' . $seotitle . '</td><td>' . $text . '</td></tr>'; 
    } 

} 
?> 

更多詳情:

http://php.net/manual/en/function.substr-count.php

+0

謝謝!我之前添加了if,所以它也可以包含一個空的searchText變量。這幫助我很多! – Ismail

+0

strpos()可能是一個更便宜的操作,因爲它會查找第一個匹配項。您似乎不需要計數,substr_count()將讀取整個字符串以查找更加昂貴的事件。 – Antariksha

3

這很可能是做最簡單的方法:

$row = '<tr><td>' . $value . '</td><td>' . $seotitle . '</td><td>' . $text . '</td></tr>'; 
if (empty($searchText) || strpos($searchText, $row) !== false) { 
    echo $row; 
} 

這可能會產生錯誤的匹配,如果$searchText包含<td>什麼的,如果你擔心,你可以這樣做:

if (count(array_filter([$value, $seotitle, $text], function($v) use ($searchText) { 
    return empty($searchText) || strpos($searchText, $v) !== false; 
}))) { 
    echo '<tr><td>' . $value . '</td><td>' . $seotitle . '</td><td>' . $text . '</td></tr>'; 
} 
+0

謝謝,這是種什麼我一直在尋找的:d 但有沒有辦法讓它顯示行,即使searchText爲空?因爲它不需要寫一個searchText :) – Ismail

+0

看到編輯,它會顯示如果searchText爲空或者如果不爲空,如果它匹配searchText – dave

3

您可以通過使用strpos(): -

if(strpos($value,$searchText) !== FALSE || strpos($seotitle,$searchText) !== FALSE || strpos($text,$searchText) !== FALSE){ 
    echo '<tr><td>' . $value . '</td><td>' . $seotitle . '</td><td>' . $text . '</td></tr>'; 
} 
3

您可以使用strpos字符串函數來檢查$ searchText(Needle)是否爲$ value/$ seotitle/$ text(Haystack)的一部分。

if ((strpos($value,$searchText) !== false) or 
(strpos($seotitle,$searchText) !== false) or 
(strpos($text,$searchText) !== false)) 
{ 
    echo '<tr><td>' . $value . '</td><td>' . $seotitle . '</td><td>' . $text . '</td></tr>'; 
} 
+0

看起來像是有大量類似的答案,而我正在輸入這個! – Antariksha