2011-12-10 6 views
1

私は自分のサイトで自分の検索エンジンを作成しようとしています。キーワードを含むDBテーブルから "title"と "description"フィールドを使い、結果を表示しています。それは正常に動作しますが、 "description"の結果にそのキーワードの周りのテキストのみを表示するようにページを設定したかったのです。から"定義されていないオフセット:0"を生成するアイテムのループでコードを実行しないでください。

$description = preg_replace("/$word/","<B>$word</B>",$result[0]); 

(:

$string = $s->description; 
$word = $item; 
preg_match("/(\w+)? ?(\w+)? ?(\w+)? ?(\w+)? ?(\w+)? ?$word ?(\w+)? ?(\w+)? ?(\w+)? ?(\w+)? ?(\w+)?/i",$string,$result); 
$description = preg_replace("/$word/","<B>$word</B>",$result[0]); 

問題は、これが生成することである:

A PHP Error was encountered 
Severity: Notice 
Message: Undefined offset: 0 
Filename: search/search.php 
Line Number: 21 

ライン#21私はこれを行うにはStackOverflowの上のいくつかのコードを(!w00t)が発見しましたしかし、これは、いくつかの結果に対してのみこれを行います。私はまだ悪いものが共通しているものは分かっていませんが、それは動作しない1/4のようなものです。

私が試みた解決策は、変数$ descriptionがsetet()であるかどうかを確認するためにforeachループでチェックを行うことでした。

if(!isset($description)) { 
    if(strlen($s->description) > 200) { 
     $description = substr($s->description, 0, 200).'...'; 
    } else { 
     $description = $s->description; 
    } 
} 

それ以外の場合、変数はすでに上で定義されています。しかし、これはチェックを行わずに$ descriptionをエコーアウトすることと何も変わりません(エラーを生成する)。

私は "未定義オフセット:0"を検索し、プログラミング用語に少しだけ圧倒されました(そのうちの私は今理解し始めています)。

これは実際に動作しているかどうか、何かチェックしていただければ幸いです。

+0

preg_matchパターンマッチの回数は0になる可能性があります。 –

+0

サイドノート(検索エンジンの作成を妨げないため)では、http:// sphinxsearch .com/..カスタム検索エンジンを構築するのは非常に時間がかかり、よく確立されたソリューションと同様に動作する可能性は低いです.Sphinxはphp/mysqlアプリケーションと非常に簡単に統合できます。 – SuitedSloth

+0

私はスフィンクスで簡単に見てきましたが、自分自身に挑戦するために自分のエンジンをプログラムしたいと思っていました。私が取り組んでいるプロジェクトはペットプロジェクトであり、私が支払っているものではありません。 –

答えて

4

私は私が正しく質問の後半部分を理解していないが、私はこれがあれば状態にするpreg_matchを置くことによって予告

$string = $s->description; 
$word = $item; 
if(preg_match("/(\w+)? ?(\w+)? ?(\w+)? ?(\w+)? ?(\w+)? ?$word ?(\w+)? ?(\w+)? ?(\w+)? ?(\w+)? ?(\w+)?/i",$string,$result)){ 
    $description = preg_replace("/$word/","<B>$word</B>",$result[0]); 
} 

を取り除くことをお勧めすることができ、それは説明のみを割り当てます一致が見つかった場合。

$結果は一致するものが、他の言葉で見つからない場合は()空の配列となりますので、$は特別なを持っているので、[0]、

また、あなたの通知トリガーするその結果が$のための値を持っていません正規表現の中で変数を"/(\w+)? ?(\w+)? ?(\w+)? ?(\w+)? ?".$word." ?(\w+)? ?(\w+)? ?(\w+)? ?(\w+)? ?(\w+)?/i"などとすることを意味します。正規表現でユーザー入力を使用する場合は、$wordにpreg_quote()を必ず使用してください。予期せず破損する傾向があります。

+0

完璧に機能しました!ありがとうございました! –

+0

正確に正しい。 +1 – Peter

関連する問題