1
0
mirror of https://github.com/php/php-src.git synced 2026-04-29 03:03:26 +02:00

added an optional third parameter to str_word_count(), which is used as

a list of characters which are considerd "is_alpha()". Thus V14GR4 can
be extracted as one word if the user supplies "14" as charlist.
FR #31560
# Nuno, are you wishing to document this one too? :)
This commit is contained in:
Andrey Hristov
2005-03-12 14:41:20 +00:00
parent 07fd652824
commit f15c24d44c
2 changed files with 236 additions and 20 deletions
+25 -19
View File
@@ -4643,7 +4643,7 @@ PHP_FUNCTION(str_shuffle)
}
/* }}} */
/* {{{ proto mixed str_word_count(string str, [int format])
/* {{{ proto mixed str_word_count(string str, [int format [, string charlist]])
Counts the number of words inside a string. If format of 1 is specified,
then the function will return an array containing all the words
found inside the string. If format of 2 is specified, then the function
@@ -4656,38 +4656,44 @@ PHP_FUNCTION(str_shuffle)
*/
PHP_FUNCTION(str_word_count)
{
zval **str, **o_format;
zval **str, **o_format, **also_alphas;
char *s, *e, *p, *buf;
char *p_also = NULL;
int word_count = 0;
int type = 0;
int n_args = ZEND_NUM_ARGS();
if (n_args > 2 || n_args < 1 || zend_get_parameters_ex(n_args, &str, &o_format) == FAILURE) {
if (n_args > 3 || n_args < 1 || zend_get_parameters_ex(n_args, &str, &o_format, &also_alphas) == FAILURE) {
WRONG_PARAM_COUNT;
}
if (n_args == 2) {
convert_to_long_ex(o_format);
type = Z_LVAL_PP(o_format);
switch (n_args) {
case 3:
convert_to_string_ex(also_alphas);
if (Z_STRLEN_PP(also_alphas)) {
p_also = Z_STRVAL_PP(also_alphas);
}
case 2:
convert_to_long_ex(o_format);
type = Z_LVAL_PP(o_format);
if (type != 1 && type != 2) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "The specified format parameter, '%d' is invalid.", type);
RETURN_FALSE;
}
if (type != 1 && type !=2 && !(n_args >= 3 && type == 0)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "The specified format parameter, '%d' is invalid.", type);
RETURN_FALSE;
}
if (type) {
array_init(return_value);
}
}
convert_to_string_ex(str);
e = Z_STRLEN_PP(str) + (p = s = Z_STRVAL_PP(str));
if (type) {
array_init(return_value);
}
while (p < e) {
if (isalpha(*p++)) {
s = p - 1;
while (isalpha(*p) || *p == '\'' || (*p == '-' && isalpha(*(p+1)))) {
s = p - 1; /* the word starts at s */
while (isalpha(*p) || *p == '\'' || (*p == '-' && isalpha(*(p+1)))
|| (p_also && php_memnstr(p_also, p, 1, p_also + Z_STRLEN_PP(also_alphas)))
)
{
p++;
}
+211 -1
View File
@@ -17,6 +17,26 @@ var_dump(str_word_count($str, array()));
var_dump(str_word_count($str, $b));
var_dump($str);
$str2 = "F0o B4r 1s bar foo";
var_dump(str_word_count($str2, NULL, "04"));
var_dump(str_word_count($str2, NULL, "01"));
var_dump(str_word_count($str2, NULL, "014"));
var_dump(str_word_count($str2, NULL, array()));
var_dump(str_word_count($str2, NULL, new stdClass));
var_dump(str_word_count($str2, NULL, ""));
var_dump(str_word_count($str2, 1, "04"));
var_dump(str_word_count($str2, 1, "01"));
var_dump(str_word_count($str2, 1, "014"));
var_dump(str_word_count($str2, 1, array()));
var_dump(str_word_count($str2, 1, new stdClass));
var_dump(str_word_count($str2, 1, ""));
var_dump(str_word_count($str2, 2, "04"));
var_dump(str_word_count($str2, 2, "01"));
var_dump(str_word_count($str2, 2, "014"));
var_dump(str_word_count($str2, 2, array()));
var_dump(str_word_count($str2, 2, new stdClass));
var_dump(str_word_count($str2, 2, ""));
?>
--EXPECTF--
array(6) {
@@ -67,4 +87,194 @@ bool(false)
Warning: str_word_count(): The specified format parameter, '0' is invalid. in %s on line 14
bool(false)
string(55) "Hello friend, you're
looking good today!"
looking good today!"
int(5)
int(6)
int(5)
Notice: Array to string conversion in %s on line 21
int(7)
Notice: Object of class stdClass to string conversion in %s on line 22
int(7)
int(7)
array(5) {
[0]=>
string(3) "F0o"
[1]=>
string(3) "B4r"
[2]=>
string(1) "s"
[3]=>
string(3) "bar"
[4]=>
string(3) "foo"
}
array(6) {
[0]=>
string(3) "F0o"
[1]=>
string(1) "B"
[2]=>
string(1) "r"
[3]=>
string(1) "s"
[4]=>
string(3) "bar"
[5]=>
string(3) "foo"
}
array(5) {
[0]=>
string(3) "F0o"
[1]=>
string(3) "B4r"
[2]=>
string(1) "s"
[3]=>
string(3) "bar"
[4]=>
string(3) "foo"
}
Notice: Array to string conversion in %s on line 27
array(7) {
[0]=>
string(1) "F"
[1]=>
string(1) "o"
[2]=>
string(1) "B"
[3]=>
string(1) "r"
[4]=>
string(1) "s"
[5]=>
string(3) "bar"
[6]=>
string(3) "foo"
}
Notice: Object of class stdClass to string conversion in %s on line 28
array(7) {
[0]=>
string(1) "F"
[1]=>
string(1) "o"
[2]=>
string(1) "B"
[3]=>
string(1) "r"
[4]=>
string(1) "s"
[5]=>
string(3) "bar"
[6]=>
string(3) "foo"
}
array(7) {
[0]=>
string(1) "F"
[1]=>
string(1) "o"
[2]=>
string(1) "B"
[3]=>
string(1) "r"
[4]=>
string(1) "s"
[5]=>
string(3) "bar"
[6]=>
string(3) "foo"
}
array(5) {
[0]=>
string(3) "F0o"
[4]=>
string(3) "B4r"
[9]=>
string(1) "s"
[11]=>
string(3) "bar"
[15]=>
string(3) "foo"
}
array(6) {
[0]=>
string(3) "F0o"
[4]=>
string(1) "B"
[6]=>
string(1) "r"
[9]=>
string(1) "s"
[11]=>
string(3) "bar"
[15]=>
string(3) "foo"
}
array(5) {
[0]=>
string(3) "F0o"
[4]=>
string(3) "B4r"
[9]=>
string(1) "s"
[11]=>
string(3) "bar"
[15]=>
string(3) "foo"
}
Notice: Array to string conversion in %s on line 33
array(7) {
[0]=>
string(1) "F"
[2]=>
string(1) "o"
[4]=>
string(1) "B"
[6]=>
string(1) "r"
[9]=>
string(1) "s"
[11]=>
string(3) "bar"
[15]=>
string(3) "foo"
}
Notice: Object of class stdClass to string conversion in %s on line 34
array(7) {
[0]=>
string(1) "F"
[2]=>
string(1) "o"
[4]=>
string(1) "B"
[6]=>
string(1) "r"
[9]=>
string(1) "s"
[11]=>
string(3) "bar"
[15]=>
string(3) "foo"
}
array(7) {
[0]=>
string(1) "F"
[2]=>
string(1) "o"
[4]=>
string(1) "B"
[6]=>
string(1) "r"
[9]=>
string(1) "s"
[11]=>
string(3) "bar"
[15]=>
string(3) "foo"
}