JavaScript
x
$str = ' I love [123] and [124] at (456). I hate [234] and [235] at (123).'
I want to make it
JavaScript
$str = 'I love <a title="a">[123]</a> and <a title="b">[124]</a> at <a title="XX">(456)</a>. I hate <a title="c">[234]</a> and <a title="d">[235]</a> at <a title="ZZ">(123)</a>.'
Texts to replace with is with in braces () or [] and can be found from Table 1 or Table 2.
JavaScript
Table 1
123 | a
124 | b
234 | c
235 | d
Table 2
456 | XX
123 | ZZ
Current approach
JavaScript
$text=explode(' ', $text);
for ($i=0; $i<count($text); $i++) {
for ($j=0; $j<count($table1Col1); $j++) {
if ($text[$i] == $table1Col1[$j])
$text[$i] = '<a href="#" title="'.$table1Col2[$j].'">'.$table1Col1[$j].'</a>';
}
for ($j=0; $j<count($table2Col1); $j++) {
if ($text[$i] == $table2Col1[$j])
$text[$i] = '<a href="#" title="'.$table2Col2[$j].'">'.$table2Col1[$j].'</a>';
}
}
How to improve the code to skip not-required loop ?
Advertisement
Answer
There may be a way with one loop that I’ll think on, but since the arrays have the same keys they can’t be merged:
JavaScript
foreach($table1Col1 as $find => $repl) {
$text = str_replace("[$find]",
"<a title="$repl">[$find]</a>",
$text);
}
foreach($table1Col2 as $find => $repl) {
$text = str_replace("($find)",
"<a title="$repl">($find)</a>",
$text);
}