Funktion str_word_count() - Anzahl der Wörter ermitteln

Zeichenketten müssen in PHP-Programmen in vielerlei Hinsicht analysiert werden. Eine mögliche Aufgabe hierbei kann sein, dass man die Anzahl der Wörter in einem String ermitteln muss. Ein typisches Beispiel hierfür ist, wenn man der Redaktion vorgegeben hat, dass ein Artikel eine gewisse Anzahl an Wörtern enthalten muss. Um die Anzahl der Wörter zu ermitteln, kann man in PHP die Funktion str_word_count() verwenden. Innerhalb der runden Klammern werden die Parameter wie folgt angegeben.

  1. Die Zeichenkette, in der die Wörter gezählt werden sollen (string).
  2. Das Format des Rückgabewerts (format, optional).
  3. Eine Liste von Zeichen, die als Wortbestandteile betrachtet werden sollen (charlist, optional).

Als Wörter werden locale-abhängige Strings interpretiert, die die Buchstaben des Alphabets enthalten. Ziffern und die meisten Sonderzeichen zählen nicht dazu. Enthält ein Wort z.B. eine oder mehrere Ziffern, erfolgt an den Stellen eine Trennung und das kann dazu führen, dass das Wort als 2 oder mehr Wörter gezählt wird.

Eine Ausnahme bei den Sonderzeichen bildet das einfache Hochkomma ' und der Bindestrich -. Enthält der String als erstes oder letztes Zeichen ein ' oder -, zählen diese nicht als Bestandteil des ersten bzw. letzten Worts. Sind sie jedoch in der Mitte des Strings (nach dem ersten oder vor dem letzten Zeichen), werden sie als Bestandteil des Worts interpretiert. Beim folgenden Beispiel ergibt die Ausgabe 3, da der String 3 Wörter enthält.

<?php

$str = 'Wort1 Wort2 Wort3';

// Ausgabe 3
echo str_word_count($str);

?>

Das Format des Rückgabewerts von str_word_count()

In der Standardeinstellung gibt die Funktion die Anzahl der Wörter zurück. Das Format des Rückgabewerts kann beeinflusst werden. Hierfür kann man den zweiten Parameter wie folgt setzen.

  • 0: Anzahl der Wörter zurückgeben (Standard).
  • 1: Alle Wörter des Strings in einem indizierten Array zurückgeben.
  • 2: Alle Wörter des Strings in einem assoziativen Array zurückgeben. Der Key des Array-Elements gibt dabei die numerische Position des Worts an und der Inhalt des Array-Elements ist das Wort selbst.

Beim folgenden Beispiel ist der Rückgabewert ein indiziertes Array, der mit dem Index 0 beginnt und automatisch durchnummeriert wird. Das Array wird in diesem Beispiel mit der Funktion print_r() ausgegeben. Hierbei ist zu sehen, dass die Ziffern nicht als Bestandteil eines Worts gezählt werden und daher nicht im Array-Element enthalten sind.

    <?php
    
    $str = 'Wort1 Wort2 Wort3';
    
    // Rückgabewert im indizierten Array speichern
    $arr = str_word_count($str, 1);
    
    // Ausgabe Array ([0] => Wort [1] => Wort [2] => Wort)
    print_r($arr);
    
    ?>

    Setzt man als zweiten Parameter eine 2, ist der Rückgabewert ein assoziatives Array. Beim folgenden Beispiel ist zu sehen, dass der Key die numerische Position des Worts angibt und das Array-Element das Wort selbst enthält.

    <?php
    
    $str = 'Wort1 Wort2 Wort3';
    
    // Rückgabewert im assoziativen Array speichern
    $arr = str_word_count($str, 2);
    
    // Ausgabe Array ([0] => Wort [6] => Wort [12] => Wort)
    print_r($arr);
    
    ?>

    Falls der String mit einem Bindestrich oder Hochkomma beginnt oder endet, werden diese nicht als Bestandteil des ersten bzw. letzten Worts interpretiert. Kommen sie jedoch nach dem ersten bzw. vor dem letzten Zeichen vor, werden sie als ein Bestandteil des jeweiligen Wortes betrachtet. Beim folgenden Beispiel enthält der String mehrere Bindestriche. Die Bindestriche am Anfang und am Ende des Strings werden nicht im Array-Element gespeichert. Bei der Positionsangabe der Wörter über den Key wird der Bindestrich zu Beginn des Strings jedoch berücksichtigt.

    <?php
    
    $str = '-Wort1 -Wort2 Wo-rt3-';
    
    // Rückgabewert im assoziativen Array speichern
    $arr = str_word_count($str, 2);
    
    // Ausgabe Array ([1] => Wort [7] => -Wort [14] => Wo-rt)
    print_r($arr);
    
    ?>

    Falls die Wörter Ziffern (oder andere Sonderzeichen als ' und -) enthalten, erfolgt an den Stellen eine Trennung und das führt evtl. dazu, dass aus einem Wort mehrere Wörter entstehen. Beim folgenden Beispiel werden z.B. aus 1a1a1 die beiden Wörter a und a und aus 2b2b2 die beiden Wörter b und b gebildet. Die Ziffern werden bei der Positionsangabe über den Key berücksichtigt.

    <?php
    
    $str = '1a1a1 2b2b2';
    
    // Rückgabewert im assoziativen Array speichern
    $arr = str_word_count($str, 2);
    
    // Ausgabe Array ([1] => a [3] => a [7] => b [9] => b)
    print_r($arr);
    
    ?>

    Falls gewisse Ziffern oder Sonderzeichen als Wortbestandteile betrachtet werden sollen, kann  man diese als dritten Parameter angeben. Beim folgenden Beispiel werden die Ziffern 1 und 2 sowie das Dollarzeichen $ angegeben.

    <?php
    
    $str = '1a1 2b2 $c$';
    
    // Rückgabewert im assoziativen Array speichern
    $arr = str_word_count($str, 2, '12$');
    
    // Ausgabe Array ([0] => 1a1 [4] => 2b2 [8] => $c$)
    print_r($arr);
    
    ?>

    Umlaute mit str_word_count()

    Auch wenn die locale Einstellung auf de_DE.UTF-8 gesetzt ist, kann es passieren, dass die Umlaute (oder andere Zeichen in UTF-8) nicht als Wortbestandteile interpretiert werden. Beim folgenden Beispiel ist der Rückgabewert praktisch leer.

    <?php
    
    $str = 'äöüß äöüß';
    
    // Rückgabewert im assoziativen Array speichern
    $arr = str_word_count($str, 2);
    
    // Ausgabe Array ( )
    print_r($arr);
    
    ?>

    Eine schnelle Lösung kann sein, die Umlaute als dritten Parameter anzugeben.

    <?php
    
    $str = 'äöüß äöüß';
    
    // Rückgabewert im assoziativen Array speichern
    $arr = str_word_count($str, 2, 'ÄÖÜäöüß');
    
    // Ausgabe Array ([0] => äöüß [9] => äöüß)
    print_r($arr);
    
    ?>

    Daneben ist es auch möglich, eine eigene Funktion zu schreiben, mit der die Umlaute oder andere Zeichen in der Zeichenkodierung UTF-8 als Wortbestandteile berücksichtigt werden. Mit der Funktion str_word_count_utf8() im folgenden Beispielcode können die Wörter eines Strings in der Zeichenkodierung UTF-8 gezählt werden.

    <?php
    
    $str = 'äöüß äöüß';
    
    // Funktion erstellen
    function str_word_count_utf8($str)
    {
      return preg_match_all('/\pL+/u', $str, $matches);
    }
    
    // Ausgabe 2
    echo str_word_count_utf8($str);
    
    ?>

    Mit der Funktion preg_match_all() wird eine Suche anhand eines regulären Ausdrucks durchgeführt.