ID: 16681 Comment by: cathy_aduana at yahoo dot com Reported By: phpbugs at priorwebsites dot com Status: Closed Bug Type: Feature/Change Request Operating System: Windows XP Home Edition PHP Version: 4.1.2 New Comment:
[EMAIL PROTECTED] Previous Comments: ------------------------------------------------------------------------ [2003-02-06 14:40:09] [EMAIL PROTECTED] This bug has been fixed in CVS. In case this was a PHP problem, snapshots of the sources are packaged every three hours; this change will be in the next snapshot. You can grab the snapshot at http://snaps.php.net/. In case this was a documentation problem, the fix will show up soon at http://www.php.net/manual/. In case this was a PHP.net website problem, the change will show up on the PHP.net site and on the mirror sites in short time. Thank you for the report, and for helping us make PHP better. str_words_count() is avaliable as of PHP 4.3.0. ------------------------------------------------------------------------ [2002-05-06 10:16:23] phpbugs at priorwebsites dot com I have a few points to add: 1) YOU CANNOT ALWAYS CHOOSE THE STARTING FORMAT Daniel says that instead of: $countries = "England Spain France Italy"; we should code: $countries = array("England", "Spain", "France", "Italy"); but it is not always so easy to start with an array. Let me give a real world example. I am currently writing a search engine, where the user may type whatever they want; I want to match not just the whole search term, but each individual word. So, if the user types "Baptist churches", I can match "Baptist" and "churches". // $search_string = "Baptist churches" // Loop for the number of words in the string for ($i=0; $i<=words($search_string); $i++) { // Get the matches for the i-th word get_matches(word($search_string, $i)); } I agree that we CAN get the words using regular expressions. That brings me to my next point. 2) IT IS NOT EASY FOR PEOPLE TO CORRECTLY USE REGULAR EXPRESSIONS TO GET WORDS. If you are reading this, you are probably a highly skilled PHP programmer, able to create first time a correctly functioning regular expression. And one which functions correctly for ALL inputs. This example in the ereg section from the PHP documentation itself does NOT always give the correct result: ereg ("([[:alnum:]]+) ([[:alnum:]]+) ([[:alnum:]]+)", $string,$regs); /* Places three space separated words into $regs[1], $regs[2] and $regs[3]. */ For example, in my real search engine example, a user searching "C++ or C" would be disappointed to find that I have searched for "C" or "C"! And of course regular expressions do not use the locale. 3) THE OBJECT-ORIENTED VIEW OF STRINGS DEMANDS THE PROPOSED WORD FUNCTIONS It goes against OO to convert a string into an array, just because string lacks a function (i.e. words) that array has (i.e. count). If we view the string as an object, it is not satisfactory to say that we can convert the object to another object type and use the functions which exist for that object type. It is rather like saying that we do not need an addition operator for integers because we are able to convert integers to doubles/floats in order to add. 4) CONSISTENCY There already exists the 'ucwords()' function, so it is accepted that a word is a valid concept within a string. Hugh ------------------------------------------------------------------------ [2002-04-20 08:45:12] phpbugs at priorwebsites dot com I notice this example in the ereg section: ereg ("([[:alnum:]]+) ([[:alnum:]]+) ([[:alnum:]]+)", $string,$regs); /* Places three space separated words into $regs[1], $regs[2] and $regs[3]. */ which could become something like the following with the proposed word() function: $regs[1] = word($string, 1); $regs[2] = word($string, 2); $regs[3] = word($string, 3); Even for hardened regular expression fans, I'm sure you would agree which would be nicer to encounter in somebody elses uncommented code. And I know which I'd rather place my money on as working correctly. Hugh ------------------------------------------------------------------------ [2002-04-19 04:59:54] [EMAIL PROTECTED] This does not warrant new functions. What you are trying to do should be done with arrays: /**************************/ $countries = array("England", "Spain", "France", "Italy"); print "There are " . count($countries) . " countries competing"; print "The " . count($countries) . " are:"; for ($i=0; $i<count($countries); $i++) { print $countries[$i]; } /***************************/ if you have an input string like: $string = "England Spain France Italy"; you can make an array of it: $countries = preg_split("/\s+/", $string); Still, the proposed functions look like a good addition to the language as people do not want to study regular expressions. ------------------------------------------------------------------------ [2002-04-19 04:32:04] phpbugs at priorwebsites dot com When I was coding the sample code with the $countries (above), I realised that PHP also misses some other crucial functions for word processing. These are basic word functions which I am used to having in a powerful language. Therefore, request changed to request words(), word(), wordindex(), wordlength() functions. Hugh Prior ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/16681 -- Edit this bug report at http://bugs.php.net/?id=16681&edit=1