PHPでデータベースから取得した英単語表を、複数ワードで検索し、赤文字に変換して表示する

PHPでデータベースから英単語とその意味を表示するページを下記のように作成しています。
小学校のWord一覧
中学校のWord一覧
SimpleWikipediaの1500_Word一覧
LongmanDictionaryWord一覧
NGSL_Word一覧を見る
Oxford-3000_Word一覧
Oxford-5000_Word一覧
英単語集(14万語)
ANC30000英単語集

これらのページで、単語の一部(複数でも)を検索し、それに当てはまる部分を赤文字で表示しようとしました。
PHPでもプログラムの仕方がわからないので、AIに尋ねました。

「Perplexity」https://www.perplexity.ai/)、「ChatGPT」(https://chat.openai.com/)を利用しました。

そこで示されたのが、次のような記述でした。

foreach ($keywords as $keyword) {
$text = preg_replace("/$keyword/i", "$0", $text);
}
echo $text;

この中で、$keywordsは検索した複数のwordの配列。$textは検索する文章。
一度に検索して赤文字で示すことができるので大変良かった。
しかし、英単語(あるいは英語の文章)と意味の表で行っているときに、少し不具合を感じることがあった。
「an sp」というような短い文字で複数検索すると、赤い文字を設定するための記述「<span 」などが、2つ目のwordで引っかかってしまうのです。
AIをいろいろ試してみたのですが、うまくいきませんでした。
そこで思いついたのが、文字を赤く変えるのは最後だけにして、それまでは記号で置き換えるというものです。PHPにそれほど詳しくないので、自分の知識の範囲での対処法です。
そこで、上記を、回りくどく

foreach ($word_array as $keys) {
//タグのspanの文字がワードの文字に検索されないように一旦記号に置き換える
$word_s = preg_replace("/$keys/i", "★$0●", $word_s);//$word_sは検索用 文字列の$wordと同じもの
}
//記号を赤文字に設定するタグに置き換える
$kigou = ['★','●'];
$replaces = ["",""];
echo ""; echo str_replace($kigou, $replaces, $word_s); echo "";

と書き換えることによって、「span 」などの文字を置き換えるタグを拾わないようにしたものです。

ボタンと入力で「アイ」と「愛」の本をさがそう~マイクロソフト・アクセスのフォーム

マイクロソフトのAccessを使用して2万冊以上の本をデータベースにしました。

その本を探すために、「本をさがそう」というフォームを作成しました。今までは直接キーボードから入力して調べるページでしたが、あらたにボタンキーから入力するページも作成してみました。キーボードに両手を移動させなくても、マウス一つでクリックすることによって入力することができます。パソコンの画面がタッチパネルであれば指で入力することもできます。

 

エクセルで他シートのデータを分類のダウンリストで検索しその分類内の商品をダウンリスト表示する

エクセルのシートを検索表示シート、商品分類商品名シートとし次のような形とする。

分類検索

図1

 

上にあるように、複数の分類の中から1つ選んだら、その分類内の商品名が表示でき、価格や在庫の様子を示したい。そこで

1_名前の定義

図2

 

商品名のシートが上のようにつくられている。簡単にするために分類ごとに商品名も並んでいる。このシートの中を後の関数式をわかりやすくするために名前を定義する。

2_名前の定義a

図3

 

枠で囲んだところをそれぞれ選んでは、右クリックしてメニューから「範囲に名前をつける」をクリックし、aは「分類」、bは「くだもの」,cは「野菜」,dは「魚」と定義する。

図1の検索シートに戻り、分類の欄(A2)に入力規則を設定する。

分類入力規則

図4

 

図4の「元の値」の「分類」はシート「商品」で定義した「分類」を示している。

続いてその分類に応じた商品を選択する欄には

品名の入力規則

図5

図5のA2の分類欄で選んだものに該当する商品だけを表示するために、入力規則をリストを選択し、元の値を「=INDIRECT($A$2) 」と設定する。これで分類欄で「くだもの」をダウンリストから選択すると「くだもの」に分類された商品だけがダウンリストで表示できる。

ここでは1つだけのものを表示することを考えているので、商品シートに作業のための行を設定した。

作業欄の設定

図6

商品シートの色を塗ったところが作業のための欄です。「分類」と「商品名」は検索シートから値をとるので、「=検索!A2」「=検索!B2」とします。さらに価格と在庫の欄についてはこの商品シートないですからVLOOKUPの関数が使用できます。「価格」は「=VLOOKUP($B18,$B$6:$D$14,COLUMN()-COLUMN($B18)+1,FALSE)」、在庫は「=VLOOKUP($B18,$B$6:$D$14,COLUMN()-COLUMN($B18)+1,FALSE)」と関数式を入力することで表示できます。

最後に検索シートに戻り

品名検索

図7

価格と在庫の欄は商品シートの作業欄のデータをとるということで、「=商品!C18」,「=商品!D18」とすれば表示させることができます。

図5と図7でデータが異なりますが、ダウンリストに応じて選択できるというのは、いろいろに使えそうです。今回やってみて、他シートにデータが数多くあり、別シートにそのデータを表示できるのです。

 

 

 

エクセルで分類と品名を名前定義を利用し連動させてドロップダウン表示させる

エクセルで分類欄と品名欄、それぞれの品に多くの特別のデータがあり、それを操作するシートに検索して表示させたいことが生じた。そこでここでは簡単な例をつくり覚えのために記録する。

名前の定義a

 

このような分類と品名、それぞれのデータのシートがある。枠で囲ったa~dの範囲をそれぞれ選択しメニューから(あるいは右クリックで)「範囲に名前をつける」をクリックし、a:「分類」、b:「くだもの」、c:「野菜」、d:「魚」と定義する。

検索シートの分類の表示欄に

分類入力規則

 

と名前を定義した「分類」を元の値の欄に記入し入力規則を設定する。続いて品名入力規則を

品名の入力規則

として元の値の欄に「=INDIRECT($A$2)」と入力し、A2の欄の分類名に応じて品名が表示できるようにする。こうすることによって

品名検索

 

上のように分類に応じた品名だけが表示できる。

続いて価格や在庫の様子について表示するために、商品シートに作業欄を設ける。

作業欄の設定

 

色で表示している部分が作業欄である。分類や品名は、検索シートのデータを参照する。そして価格や在庫の欄は上の俵の中からVLOOKUP関数を用いて検索し値を表示させている。列の表示は2とか3とかと入力してもよいのだが、たくさんのデータがあることを想定して

=VLOOKUP($B18,$B$6:$D$14,COLUMN()-COLUMN($B18)+1,FALSE)

として、COLUMN()-COLUMN($B18)+1 で基準列からの列番号を取得する。これによって右にデータを「コピー」>「数式の貼り付け」によって簡単に同様の作業をできるようにする。

この作業欄をつくることによって、検索シートの品名を選択したらこれらのデータ表示が楽になる。

品名検索

検索シートの価格、在庫などの欄は、商品シートの価格、在庫欄のデータを表示するように「=商品!C18」などと入力するだけで終わる。横にどれだけの欄があっても楽である。

今回は、非常に単純な商品シートを使い、分類や品名の名前定義が簡単にできた。分類が入り組み品が次々に増えていく場合には、分類名だけを集約する欄、それに応じる品名を集約する欄を作成しておく必要がある。