我从六 (6) 个不同的文本区域中提取输入,以 \r\n 作为分隔符来分解数组,并循环遍历每组数据两次以替换它。
例如,我有 textarea 输入,人们可以在其中放置与列出的主要颜色相似的颜色,因此标题为“Blue”的 textarea 的输入可能是Aqua\r\nRoyal Blue\r\nTeal
然后我有类似数据的红色、橙色、黄色、绿色和紫色的输入框。
我想将用户输入(在本例中为 Aqua)替换为<span class="blue">Aqua</span>
. 蓝色框中的任何输入都包含在“蓝色”类中,红色中的任何内容class="red"
等等。
我已经让这一切工作得很好,循环遍历每组数据两次:一个 foreach 循环查找文本,另一个创建替换文本,最后简单地使用 preg_replace 实际执行替换。
$find_blue = explode ("\r\n", $blue);
$replace_blue = explode ("\r\n", $blue);
$i = 0;
foreach($replace_blue AS &$html)
{
$find_blue[$i] = trim($find_blue[$i]);
$html = '<span class="blue">' . $find_blue[$i] . '</span>';
$i++;
}
foreach($find_blue AS &$found)
{
$found = preg_quote(htmlspecialchars($found));
$found = '~\b('.$found.')\b)~i';
}
$output = preg_replace($find_blue, $replace_blue, $output);
这工作得很好,但我认为这是一个笨拙的代码,有 12 个循环(每种颜色 2 个)都在做同样的事情。我想编写更简洁、更高效、更好的代码,并且我知道 array_merge 存在,但我不确定如何集成它或使所有内容保持一致和凝聚力。