|
|
 |
str_word_count (PHP 4 >= 4.3.0, PHP 5) str_word_count --
Return information about words used in a string
Descriptionmixed str_word_count ( string string [, int format [, string charlist]] )
Counts the number of words inside string.
If the optional format is not specified, then
the return value will be an integer representing the number of words
found. In the event the format is specified, the return
value will be an array, content of which is dependent on the
format. The possible value for the
format and the resultant outputs are listed below.
For the purpose of this function, 'word' is defined as a locale dependent
string containing alphabetic characters, which also may contain, but not start
with "'" and "-" characters.
Parameters
- string
The string
- format
Specify the return value of this function. The current supported values
are:
0 - returns the number of words found
1 - returns an array containing all the words found inside the
string
2 - returns an associative array, where the key is the numeric
position of the word inside the string and
the value is the actual word itself
- charlist
A list of additional characters which will be considered as 'word'
Return Values
Returns an array or an integer, depending on the
format chosen.
Examples
Example 1. A str_word_count() example |
<?php
$str = "Hello fri3nd, you're
looking good today!";
print_r(str_word_count($str, 1));
print_r(str_word_count($str, 2));
print_r(str_word_count($str, 1, 'àáãç3'));
echo str_word_count($str);
?>
|
The above example will output: Array
(
[0] => Hello
[1] => fri
[2] => nd
[3] => you're
[4] => looking
[5] => good
[6] => today
)
Array
(
[0] => Hello
[6] => fri
[10] => nd
[14] => you're
[29] => looking
[46] => good
[51] => today
)
Array
(
[0] => Hello
[1] => fri3nd
[2] => you're
[3] => looking
[4] => good
[5] => today
)
7 |
|
User Contributed Notes
str_word_count
16-Jan-2005 08:38
This function seems to view numbers as whitespace. I.e. a word consisting of numbers only won't be counted.
aix at lux dot ee
14-Nov-2004 04:53
One function.
<?php
if (!function_exists('word_count')) {
function word_count($str,$n = "0"){
$m=strlen($str)/2;
$a=1;
while ($a<$m) {
$str=str_replace(" "," ",$str);
$a++;
}
$b = explode(" ", $str);
$i = 0;
foreach ($b as $v) {
$i++;
}
if ($n==1) return $b;
else return $i;
}
}
$str="Tere Tartu linn";
$c = word_count($str,1); $d = word_count($str); print_r($c);
echo $d;
?>
aidan at php dot net
26-Jun-2004 05:02
This functionality is now implemented in the PEAR package PHP_Compat.
More information about using this function without upgrading your version of PHP can be found on the below link:
http://pear.php.net/package/PHP_Compat
Kirils Solovjovs
22-Feb-2004 11:06
Nothing of this worked for me. I think countwords() is very encoding dependent. This is the code for win1257. For other layots you just need to redefine the ranges of letters...
<?php
function countwords($text){
$ls=0;$cc33=0;for($i=0;$i<strlen($text);$i++){
$spstat=false; $ot=ord($text[$i]);
if( (($ot>=48) && ($ot<=57)) || (($ot>=97) && ($ot<=122)) || (($ot>=65) && ($ot<=90)) || ($ot==170) ||
(($ot>=192) && ($ot<=214)) || (($ot>=216) && ($ot<=246)) || (($ot>=248) && ($ot<=254)) )$spstat=true;
if(($ls==0)&&($spstat)){
$ls=1;
$cc33++;
}
if(!$spstat)$ls=0;
}
return $cc33;
}
?>
Artimis
15-Oct-2003 04:32
Never use this function to count/separate alphanumeric words, it will just split them up words to words, numbers to numbers. You could refer to another function "preg_split" when splitting alphanumeric words. It works with Chinese characters as well.
andrea at 3site dot it
19-May-2003 06:55
if string doesn't contain the space " ", the explode method doesn't do anything, so i've wrote this and it seems works better ... i don't know about time and resource
<?php
function str_incounter($match,$string) {
$count_match = 0;
for($i=0;$i<strlen($string);$i++) {
if(strtolower(substr($string,$i,strlen($match)))==strtolower($match)) {
$count_match++;
}
}
return $count_match;
}
?>
example
<?php
$string = "something:something!!something";
$count_some = str_incounter("something",$string);
?>
megat at megat dot co dot uk
18-Apr-2003 08:29
[Ed: You'd probably want to use regular expressions if this was the case --alindeman @ php.net]
Consider what will happen in some of the above suggestions when a person puts more than one space between words. That's why it's not sufficient just to explode the string.
olivier at ultragreen dot net
11-Apr-2003 08:10
I will not discuss the accuracy of this function but one of the source codes above does this.
<?php
function wrdcnt($haystack) {
$cnt = explode(" ", $haystack);
return count($cnt) - 1;
}
?>
That could be replace by
<?php
function wrdcnt($haystack) {
return substr_count($haystack,' ') + 1;
}
?>
I doubt this does need to be a function :)
philip at cornado dot com
06-Apr-2003 09:30
Some ask not just split on ' ', well, it's because simply exploding on a ' ' isn't fully accurate. Words can be separated by tabs, newlines, double spaces, etc. This is why people tend to seperate on all whitespace with regular expressions.
rcATinterfacesDOTfr
16-Jan-2003 09:58
Here is another way to count words :
$word_count = count(preg_split('/\W+/', $text, -1, PREG_SPLIT_NO_EMPTY));
brettNOSPAM at olwm dot NO_SPAM dot com
09-Nov-2002 02:06
This example may not be pretty, but It proves accurate:
<?php
$words_to_count = strip_tags($body);
$pattern = "/[^(\w|\d|\'|\"|\.|\!|\?|;|,|\\|\/|\-\-|:|\&|@)]+/";
$words_to_count = preg_replace ($pattern, " ", $words_to_count);
$words_to_count = trim($words_to_count);
$total_words = count(explode(" ",$words_to_count));
?>
Hope I didn't miss any punctuation. ;-)
gorgonzola at nospam dot org
31-Oct-2002 04:48
i tried to write a wordcounter and ended up with this:
<?php
$text = strip_tags(strtr($text, array_flip(get_html_translation_table(HTML_ENTITIES))));
$wordcount = preg_match_all("#(\w+)#", $text, $match_dummy );
?>
| |