我正在爲網站的詞彙表auto-tooltip功能。這將允許管理員使用相應的定義輸入詞彙表詞匯,然後這些詞彙會在前端出現的任何地方變爲可靠的工具提示觸發器。PHP:查找子字符串,包裝在具有動態屬性的標籤中
下面是我使用的方法:
的所有內容輸出之前,通過與術語詞彙表正則表達式搜索和帶班,然後由拿起包裝他們的標籤的功能過濾JavaScript來處理工具提示的懸停顯示。
我需要做的事,而且不能弄清楚的是,還包括適當的定義作爲跨度上的標題屬性。
這是到目前爲止我的代碼:(初始陣列只是一個例子,也有各自更多的條目)
function glossary_highlight($content) {
$glossary = ['Lorem', 'Ipsum'];
$definitions = ['Lorem is a type of crocodile', 'Ipsum is a kitchen utensil'];
$patterns = [];
foreach ($glossary as $term) {
$patterns[] = '/\b' . $term . '\b/i';
}
$wrapper = '<span class="tooltip" title="XXXX">$0</span>';
$wrapped = preg_replace($patterns, $wrapper, $content);
return $wrapped;
}
我需要XXXX與在相應的條目被替換$ definitions數組。我無法在foreach循環中執行正則表達式,因爲如果定義中包含其他詞彙表術語等,它可能會在其他跨度的標題內添加跨度。
所需效果 - 給出「Lorem」的$內容存有悲坐阿梅特」,從這個函數返回的應該是:
<span class="tooltip" title="Lorem is a type of crocodile">Lorem</span> <span class="tooltip" title="Ipsum is a kitchen utensil">ipsum</span> dolor sit amet
我的第一個傾向是做這樣的事情:
$wrapper = '<span class="tooltip" title="' . $definitions[$key] . '">$0</span>';
其中$關鍵是相對於詞彙表項的索引有問題,但我無法弄清楚如何w ork那成爲foreach。
如果我不能在PHP中想到這一切,我想我只會應用工具提示跨度並將定義數組發送到javascript以追加標題屬性,但我寧願不將基本任務兩種語言...
我確定這裏有一個完全簡單的答案,但我的大腦不會看到它!誰能幫忙?
編輯:感謝螢科對他的幫助下面的代碼的工作原理如下:
function glossary_highlight($content) {
$glossary = ['Lorem', 'Ipsum'];
$definitions = ['Lorem is a type of crocodile', 'Ipsum is a kitchen utensil'];
$patterns = [];
foreach ($glossary as $term) {
$patterns[] = '/\b' . $term . '\b/i';
}
$wrappers = [];
foreach ($definitions as $definition) {
$wrappers[] = '<span class="tooltip" title="' . $definition . '">$0</span>';
}
$wrapped = preg_replace($patterns, $wrappers, $content);
return $wrapped;
}
展示示範'$ content' – RomanPerekhrest
只是擡起頭來,我覺得你的代碼可以在一些愚蠢的行爲情況:即包含文字,特別是複數的文字。如果術語中有「馬」,則「馬」將被標記爲「馬」。如果序列在術語表中,「結果」將被標記爲「con sequence」。 –
謝謝,我已經更新了正則表達式來使用單詞邊界來規避這一點。 – Sark