У меня есть проблема с некоторым содержимым, которое имеет ту же ссылку снова и снова, поэтому я хочу удалить все дубликаты ссылок, кроме одного, есть кто-нибудь, как это сделать ????
вот мой код, который удаляет все ссылки
function anchor_remover($page) { $filter_text = preg_replace("|<<blink>a *<blink>href=\<blink>"(.*)\">(.*)</a>|","\\2",$page); return $filter_text; } add_filter('the_content', 'anchor_remover');
в основном мне это нужно для wordpress, для фильтрации содержимого и удаления дубликатов ссылок должна быть только одна ссылка.
Использование preg_replace_callback:
<?php /* * vim: ts=4 sw=4 fdm=marker noet */ $page = file_get_contents('./dupes.html'); function do_strip_link($matches) { static $seen = array(); if( in_array($matches[1], $seen) ) { return $matches[2]; } else { $seen[] = $matches[1]; return $matches[0]; } } function strip_dupe_links($page) { return preg_replace_callback( '|<a\s+href="(.*?)">(.*?)</a>|', do_strip_link, $page ); } $page = strip_dupe_links($page); echo $page;
Входные данные:
<html> <head><title>Hi!</title></head> <body> <a href="foo.html">foo</a> <a href="foo.html">foo</a> <a href="foo.html">foo</a> <a href="foo.html">foo</a> <a href="foo.html">foo</a> <a href="foo.html">foo</a> <a href="foo.html">foo</a> <a href="foo.html">foo</a> <a href="foo.html">foo</a> <a href="foo.html">foo</a> <a href="bar.html">bar</a> </body> </html>
Вывод:
<html> <head><title>Hi!</title></head> <body> <a href="foo.html">foo</a> foo foo foo foo foo foo foo foo foo <a href="bar.html">bar</a> </body> </html>