Ограничить вывод внутренних ссылок из файла

100
11 апреля 2021, 15:50

Есть вот такой небольшой код на странице новости:

$new_text = nl2br($text);
$file = file('tags.txt');
$str = $new_text;
foreach($file as $v) {
    $v1 = explode(":", $v);
    $str = preg_replace("/(".$v1[0].".*?)\b/iu", "<a href='http://".$v1[1]."'>\\1</a>", $str, 1);
}
echo $str;

Файл tags.txt:

Ольга Бузова:site.ru/olga_buzova/
Ольгу Бузову:site.ru/olga_buzova/
Ольге Бузовой:site.ru/olga_buzova/

Переменная $text с текстом:

Ольга Бузова заявила, что является певицей, однако Ольге Бузовой не поверили.

В результате всего этого на выводе получаю следующее:

<a href="http://site.ru/olga_buzova/">Ольга Бузова</a> заявила, что является певицей, однако <a href="http://site.ru/olga_buzova/">Ольге Бузовой</a> не поверили.

Код расставляет ссылки из файла tags.txt с анкорами, если они встречаются в тексте. Все хорошо, прямые дубли он распознает и не вставляет, однако как из текста удалить второй анкор "Ольге Бузовой", если найден первый "Ольга Бузова"?

Answer 1

Как из текста удалить второй анкор "Ольге Бузовой", если найден первый "Ольга Бузова"?

Объявить временный массив, в который сохранять имеющиеся URL'ы, и проверять на каждой итерации, нет ли в массиве такого адреса:

$text = 'Ольга Бузова заявила, что является певицей, однако Ольге Бузовой не поверили.';
$file = [
    'Ольга Бузова:site.ru/olga_buzova/',
    'Ольгу Бузову:site.ru/olga_buzova/',
    'Ольге Бузовой:site.ru/olga_buzova/'
];
$temp = [];
foreach ($file as $v) {
    list($name, $url) = explode(":", $v);
    if (! in_array($url, $temp)) {
        $text = preg_replace("~$name~iu", "<a href='http://$url'>$0</a>", $text);
        $temp[] = $url;
    }
}
echo $text;
READ ALSO
Можно ли как-то указать путь на внешнюю библиотеку, которую я хочу использовать в проекте?

Можно ли как-то указать путь на внешнюю библиотеку, которую я хочу использовать в проекте?

Есть возможность добавить зависимость или библиотеку в структуру проекта указавши к ней путь или добавить как модуль

97
Как работает сокет в java

Как работает сокет в java

Как работает сокет в java, как он подключает между собой клиент и сервер и позволяет им обмениваться данными?

90
Изменённая логика RecyclerView

Изменённая логика RecyclerView

Задача: Сделать карусель фотографий, где последний элемент будет добавлять в карусель новые фотографии

120