-4

私はいくつかの大きな文字列と、リンクでラップするなど、いくつかの変更で置き換える必要があるいくつかの単語の配列を持っています。最初の問題は、単語全体または単語の組み合わせをラップすることです。そして2番目の問題は、1000文字ごとに少なくとも前のステップを実行することです。

$string="lalala word lalala blah, blah lalala combination of words lalala lalala...";  
$patterns=array('word','combination of words');  
$replacements=array('<a href="#">word</a>','<a href="#">combination of words</a>');  

たとえば、前にスニペットをどうする必要がありますか?

4

2 に答える 2

0

解決:

 <?php
        function set_keys_by_words($content, $key, $words,$before,$after) {
        $positions = array();
        $string = '';
        for ($i = 0; $i < count($words); $i++) {

            $string = preg_replace('/\b' . $words[$i] . '\b/ui', $key . $words[$i], $content);
            $position = mb_strpos($string, $key);

            if ($position != '') {
                $positions[(int) $position] = $words[$i];
            }
        }
        ksort($positions);
        $word = '';
        $number = '';
        $i = 0;
        foreach ($positions as $k => $v) {
            $i++;
            if ($i == 1) {
                $number = $k;
                $word = $v;
            }
        }
        if ((int) $number) {
            $word_len = strlen($word);
            $part_after = preg_replace('/\b' . $word . '\b/ui', $before . $word . $after, mb_substr($content, 0, $number + $word_len));
            echo $part_after . mb_substr($content, $number + $word_len, 1000);
            $content = mb_substr($content, $number + $word_len + 1000);
            if ($content != '') {
                set_keys_by_words($content, $key, $words);
            }
        } else if ($number == '' && $content != '') {
            echo $content;
        }
    }
    ?>
于 2012-07-16T09:40:25.247 に答える
0

を探しているように思えますwordwrap()。次に、それを使用preg_replace_callback()して検索パターンに適用し、置換を行うことができます。

foreach ($patterns as $pattern) {
    $regex = '/' . preg_quote($pattern, '/') . '/';
    $string = preg_replace_callback($regex, function($match) {
        return '<a href="#">'
            . wordwrap(htmlspecialchars($match), 1000, '<br />')
            . '</a>';
    }, $string);
}
于 2012-07-15T20:23:52.710 に答える