Ajax native javascript and php7.x でインクリメンタルサーチ

jQueryでのJavaScriptの記述と生のjavascriptの違いを理解できずに以下の例題※にチャレンジ。
簡単にやろうとすればjQueryなんだろうけど、JavaScriptの基本を理解していないので思い知ること多いこの頃。あえてJavaScriptだけでやってみる。ページにアクセス時jQuery使わないのでレスポンス的に有利とある。今度のVueでTypeScript利用まで目指しているが遠回りでもやる必要はある。”急げば回れ”、振り返ると確かにそう思えることは多い。過去、急いだのに結果として余計な時間がかかったということ多かった。いやそれは必要な勉強がそこにあったからかな。トータルすれば同じ時間だったかも。【閑話休題】

※CodeZIne(ユーザー登録必要)にあったもの。なんだかうまく行かない。
2006年作成の例題だからphpの版っが違うと駄目だった。
うまく動作した結果は、十分今後に役立つノウハウとなりそうだ。phoでエラーを吐き出すようにしたら、以下が表示されてきた。php7では使わないことを推奨なようだ。Deprecated: Function create_function() is deprecated in /var/www/html/ajax3/search-ajax.php on line 12

正規表現が分からないと以下のソースが理解できない!
<.*?>はhtmlのタグとなる<>で囲まれたものは無効な文字列として何もないとして置き換える。かつキーとなる検索文字($val)に置き換える? もう一歩だ!
ここがphpとして具体的なマッチングの例



$strはデータベースから該当された結果として渡されてくる。
$arrはスペース区切りで入っているキーワード。1以上だと繰り返しの中で各々のキーワードとなる。


function to_highlight_keyword($arr, $str) {
  foreach ($arr as $val) {
       $val = preg_quote($val, '/'); <ーーーこれは特殊文字をエスケープする定番の処理
      
	$str = preg_replace_callback(
        "/<.*?>|($val)/i", <---iはフラグである。ここでは大文字・小文字を区別しない条件となる
        create_function('$matches', 'return (substr($matches[0], 0, 1) == "<")? ' . ' $matches[0] : "$matches[1]";'),$str);
    }
  return $str;
}

$matchesは create_function の引数として入ってくるようだ。最初ん文字が<であるものをさがす・・・
"/<.*?>|($val)/i", <ーーここが正規表現なんだろうな。よくわからないので振り出しに戻る。

 

自分の環境は以下
CemtOS:7
php7.x
原因はphp7では使えないサンプルだった。c#ばかりで仕事してるからphpの関数で理解できていない部分がある。うまく行ったソースは大切な財産ということで以下に。このところソースがうまくWordPressに表示できない・・・。GitHubに置いとくと全部掲載できる。参照には便利だから皆さんのお役に立つかな。よく見るとAjaxでサーバーに条件を送るだけだな、表示はサーバー側でやってる。
jsonで受け取ってとかやらないと。

ソースはここに

 

No tags for this post.
タイトルとURLをコピーしました