0

HTML を削除して単語を配列に配置し、array_count_values を使用する関数があります。各単語の出現回数を報告しようとしています。出力された配列は非常に乱雑です。私はそれをきれいにしようとしましたが、どこにも行きません。電話番号を削除したいのですが、なぜかフレーズがくっついています。また、最初の配列はnullのようですが、 isset() または empty() は設定を解除していないようです。

$body = $this->get_response($domain);
                $body = preg_replace('/<body(.*?)>/i', '<body>', $body);
                $body = preg_replace('#</body>#i', '</body>', $body);

                $openTag = '<body>';
                $start = strpos($body, $openTag);
                $start += strlen($openTag);

                $closeTag = '</body>';
                $end = strpos($body, $closeTag);

                // Return if cannot cut-out the body
                if ($end <= $start || $start === false || $end === false) {
                    $this->setValue('');
                    return;
                }

                $body = substr($body, $start, $end - $start);
                $body = preg_replace(array(
                       '@<script[^>]*?>.*?</script>@si',    // Strip out javascript
                       '@<style[^>]*?>.*?</style>@siU',     // Strip style tags properly
                       '@<![\s\S]*?--[ \t\n\r]*>@',         // Strip multi-line comments including CDATA
                       '/style=([\"\']??)([^\">]*?)\\1/siU',// Strip inline style attribute
                       ), '', $body);

                $body = strip_tags($body);
                $body = array_filter(explode(' ', $body), create_function('$str', 'return strlen($str) > 2;'));
                $body = array_map('trim', $body);
                $words = $body;

                $i = 0;

                $words = array_count_values($words);

                foreach($words as $word){

                    if (empty($word)) unset($words[$i]);
                    $i++;

                }

                echo "<pre>";
                    print_r($words);
                    echo "</pre>";

出力

Array
(
    [] => 28
    [333.444.5555] => 1
    [facebook] => 2
    [twitter] => 2
    [linkedin] => 2
    [youtube

                googleplus] => 1
    [About

    History
    Our] => 1
    [Mission
    Who] => 1
    [This
     That
     Other] => 1
    [Us


English

    FA
    Football] => 1
    [Media
    Pay] => 2
    [Per] => 4
    [Think
    Fast] => 2
    [Marketing
    Design] => 1
    [Consulting


Case] => 2
4

1 に答える 1

1

explode(' ', $body)空白文字はスペースだけではないため、十分ではありません。preg_split代わりに試してください。

$body = array_filter(preg_split('/\s+/', $body), 
            create_function('$str', 'return strlen($str) > 2;'));
于 2012-09-20T16:18:17.767 に答える