★ wanayoo — archive 1999 http://fr.php.net/manual/en/function.count-chars.phpNouvelle recherche | Portail wanayoo
PHP  
downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | my php.net 
search for in the  
<convert_uuencodecrc32>
view the version of this page
Last updated: Sat, 04 Sep 2004

count_chars

(PHP 4 , PHP 5)

count_chars --  Return information about characters used in a string

Description

mixed count_chars ( string string [, int mode])

Counts the number of occurrences of every byte-value (0..255) in string and returns it in various ways. The optional parameter mode defaults to 0. Depending on mode count_chars() returns one of the following:

  • 0 - an array with the byte-value as key and the frequency of every byte as value.

  • 1 - same as 0 but only byte-values with a frequency greater than zero are listed.

  • 2 - same as 0 but only byte-values with a frequency equal to zero are listed.

  • 3 - a string containing all used byte-values is returned.

  • 4 - a string containing all not used byte-values is returned.

Example 1. count_chars() example

<?php

$data
= "Two Ts and one F.";

$result = count_chars($data, 0);

for (
$i=0; $i < count($result); $i++) {
   if (
$result[$i] != 0)
       echo
"There were $result[$i] instance(s) of \"" , chr($i) , "\" in the string.\n";
}

?>

This will output :

There were 4 instance(s) of " " in the string. 
There were 1 instance(s) of "." in the string. 
There were 1 instance(s) of "F" in the string. 
There were 2 instance(s) of "T" in the string. 
There were 1 instance(s) of "a" in the string. 
There were 1 instance(s) of "d" in the string. 
There were 1 instance(s) of "e" in the string. 
There were 2 instance(s) of "n" in the string. 
There were 2 instance(s) of "o" in the string. 
There were 1 instance(s) of "s" in the string. 
There were 1 instance(s) of "w" in the string.

See also strpos() and substr_count().



add a note add a note User Contributed Notes
count_chars
seb at synchrocide dot net
17-May-2004 12:08
After much trial and error trying to create a function that finds the number of unique characters in a string I same across count_chars() - my 20+ lines of useless code were wiped for this:

<?
function unichar($string) {
$two= strtolower(str_replace(' ', '', $string));
$res = count(count_chars($two, 1));
return
$res;
}

/* examples :: */

echo unichar("bob"); // 2
echo unichar("Invisibility"); //8
echo unichar("The quick brown fox slyly jumped over the lazy dog"); //26

?>

I have no idea where this could be used, but it's quite fun
bishop
04-Dec-2003 01:41
Here is a simple item frequency counter function, useful in reporting or statistical apps:

<?php
function count_item(&$freq, $item, $inc = 1) {
   if (!
is_array($freq)) {
      
$freq = array ();
   }
  
$freq[$item] = (isset($freq[$item]) ? ($freq[$item] += $inc) : $inc);

   return
true;
}
?>

This function saves you the hassle of doing the isset() check each time you wish to increase the frequency. If you're not normally concerned over PHP's warnings about uninitialized variables, then you should probably start from the beginning. If you are, use the function above like:

<?php
count_item
($freq, 'foo');
count_item($freq, 'bar');
count_item($freq, 'foo');
?>

After this, $freq will equal array ('foo' => 2, 'bar' => 1)
13-Apr-2002 05:29
You can also get the number of characters in a string using mb_strlen().

Example:
-----------------------------------
$my_string = "1234567890";
$count = mb_strlen($my_string);
echo "$count";
------------------------------------
Outputs --> 10

Remember that spaces and punctuation are counted.

So, if $my_string = "This is a string."
then the function above would output "17"
mlong at mlong dot org
30-Jan-2002 01:27
// Usefulness of the two functions

<?php
 $string
="aaabbc";

 
// You just want to count the letter a
 
$acount=substr_count($string,"a");

 
// You want to count both letter a and letter b
 
$counts=count_chars($string,0);
 
$acount=$counts[ord("a")];
 
$bcount=$counts[ord("b")];
?>
maotin at hongkong dot com
01-Feb-2001 02:04
Here are some more experiments on this relatively new and extremely handy function.

$string = 'I have never seen ANYTHING like that before! My number is "4670-9394".';

foreach(count_chars($string, 1) as $chr => $hit)
echo 'The character '.chr(34).chr($chr).chr(34).' has appeared in this string '.$hit.' times.<BR>';

#The result looks like
#The character " " has appeared in this string 11 times.

echo count_chars($string,3);
#The output is '!"-.034679AGHIMNTYabefhiklmnorstuvy'

echo strlen($string).' is not the same as '.strlen(count_chars($string, 3));

#This shows that '70 is not the same as 36'

As we can see above:

1)If you cares only about what is in the string, use count_chars($string, 1) and it will return an (associative?) array of what shows up only.

2) Either I misunderstood what the manul actually said, or it does not work the way it described: count_chars($strting, 3) actually returned a string of what characters are in the string, not a string of their byte-values (which is great because a string of numbers would be much harder to handle);

3)This is a short version of password checking: get the original string's length, then compare with the length of the string returned by count_chars($string,3). 

$length_of_string = strlen($string);
$num_of_chars = strlen(count_chars($string, 3));

$diff = ($length_of_string - $num_of_chars);

if ($diff)
echo 'At least one character has been used more than once.';
else
echo 'All character have been used only once.;

Note that since $num_of_chars gives no information about the actual number of occurance, we cannot go any further by the same rationale and say when $diff =2 then 2 characters showed up twice; it might be 1 character showd up 3 times, we have no way to tell (a good tolerance level setter, though).  You have to get the array and check the values if you want to have more control.

4) Final trick: now we have a primitive way to count the number of words in a string! (or do we have a fuction for that already?)

<convert_uuencodecrc32>
 Last updated: Sat, 04 Sep 2004
show source | credits | sitemap | contact | advertising | mirror sites 
Copyright © 2001-2004 The PHP Group
All rights reserved.
This mirror generously provided by: nexen.net
Last updated: Sun Sep 5 05:18:18 2004 CEST