|
count_chars
Return information about characters used in a string
(PHP 4, PHP 5)
Example 2401. count_chars() example<?php The above example will output: There were 4 instance(s) of " " in the string. Related Examples ( Source code ) » count_chars Examples ( Source code ) » String char count Code Examples / Notes » count_charsalex gemmell
Use: Great for checking for unique characters in a password. I wanted to check that my website users, when registering a user account, chose a "valid" (not-so-easily-guessed) password. One of the many checks was that the password must have 6 unique characters. I was tying myself in knots with all kinds of recursive array calling when I was offered this wonderful one line solution: function check_password($password) { #Have 6 unique characters if (count(count_chars($password, 1)) < 6) return false; # # other checks returning false as necessary # # return true; } I cannot claim this wonderful line for myself - a Mr Lynch suggested this to me. Thanks! pzb
This function is great for input validation. I frequently need to check that all characters in a string are 7-bit ASCII (and not null). This is the fastest function I have found yet: <?php function is7bit($string) { // empty strings are 7-bit clean if (!strlen($string)) { return true; } // count_chars returns the characters in ascending octet order $str = count_chars($str, 3); // Check for null character if (!ord($str[0])) { return false; } // Check for 8-bit character if (ord($str[strlen($str)-1]) & 128) { return false; } return true; } ?> apinpratap
this code can find each characters count <?php $enter = 0; $data = strtolower ($inputString); foreach (count_chars ($data, 1) as $i => $val) { if ($enter == 1) { $enter = 0; continue; } if (chr ($i) == "\n") { echo "There are $val instance(s) of \" Enter \" in the string.\n"; $enter = 1; } else { echo "There are $val instance(s) of \"" , chr ($i) , "\" in the string.\n"; } } ?> maotin
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. '; #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?) seb
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 patrick palka
A faster unique character-checking function: <?php function chr_unique($string) { return strlen(count_chars($string, 3)); } ?> mlong
// 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")]; ?> eric pecoraro
<?php // Require (n) unique characters in a string // Modification of a function below which ads some flexibility in how many unique characters are required in a given string. $pass = '123456' ; // true $pass = '111222' ; // false req_unique($pass,3); function req_unique($string,$unique=3) { if ( count(count_chars($string,1)) < $unique) { echo 'false'; }else{ echo 'true'; } } ?> |
Change Languageaddcslashes addslashes bin2hex chop chr chunk_split convert_cyr_string convert_uudecode convert_uuencode count_chars crc32 crypt echo explode fprintf get_html_translation_table hebrev hebrevc html_entity_decode htmlentities htmlspecialchars_decode htmlspecialchars implode join levenshtein localeconv ltrim md5_file md5 metaphone money_format nl_langinfo nl2br number_format ord parse_str printf quoted_printable_decode quotemeta rtrim setlocale sha1_file sha1 similar_text soundex sprintf sscanf str_getcsv str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split str_word_count strcasecmp strchr strcmp strcoll strcspn strip_tags stripcslashes stripos stripslashes stristr strlen strnatcasecmp strnatcmp strncasecmp strncmp strpbrk strpos strrchr strrev strripos strrpos strspn strstr strtok strtolower strtoupper strtr substr_compare substr_count substr_replace substr trim ucfirst ucwords vfprintf vprintf vsprintf wordwrap |