Browse Source

@- implemented count_chars(). (Thies)

PHP-4.0.5
Thies C. Arntzen 27 years ago
parent
commit
6553540153
  1. 1
      ext/standard/basic_functions.c
  2. 1
      ext/standard/php_string.h
  3. 82
      ext/standard/string.c

1
ext/standard/basic_functions.c

@ -152,6 +152,7 @@ function_entry basic_functions[] = {
PHP_FE(chop, NULL)
PHP_FE(str_replace, NULL)
PHP_FE(str_repeat, NULL)
PHP_FE(count_chars, NULL)
PHP_FE(chunk_split, NULL)
PHP_FE(trim, NULL)
PHP_FE(ltrim, NULL)

1
ext/standard/php_string.h

@ -46,6 +46,7 @@ PHP_FUNCTION(trim);
PHP_FUNCTION(ltrim);
PHP_FUNCTION(soundex);
PHP_FUNCTION(count_chars);
PHP_FUNCTION(explode);
PHP_FUNCTION(implode);
PHP_FUNCTION(strtok);

82
ext/standard/string.c

@ -2352,9 +2352,79 @@ PHP_FUNCTION(str_repeat)
}
/* }}} */
/*
* Local variables:
* tab-width: 4
* c-basic-offset: 4
* End:
*/
/* {{{ proto mixed count_chars(string input[, int mode])
Returns info about what characters are used in input */
PHP_FUNCTION(count_chars)
{
zval **input, **mode;
int chars[256];
int ac=ARG_COUNT(ht);
int mymode=0;
unsigned char *buf;
int len, inx;
char retstr[256];
int retlen=0;
if (ac < 1 || ac > 2 || getParametersEx(ac, &input, &mode) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_string_ex(input);
if (ac == 2) {
convert_to_long_ex(mode);
mymode = (*mode)->value.lval;
if (mymode < 0 || mymode > 4) {
php_error(E_WARNING, "unknown mode");
RETURN_FALSE;
}
}
len = (*input)->value.str.len;
buf = (unsigned char *) (*input)->value.str.val;
memset((void*) chars,0,sizeof(chars));
while (len > 0) {
chars[*buf]++;
buf++;
len--;
}
if (mymode < 3) {
array_init(return_value);
}
for (inx=0; inx < 255; inx++) {
switch (mymode) {
case 0:
add_index_long(return_value,inx,chars[inx]);
break;
case 1:
if (chars[inx] != 0) {
add_index_long(return_value,inx,chars[inx]);
}
break;
case 2:
if (chars[inx] == 0) {
add_index_long(return_value,inx,chars[inx]);
}
break;
case 3:
if (chars[inx] != 0) {
retstr[retlen++] = inx;
}
break;
case 4:
if (chars[inx] == 0) {
retstr[retlen++] = inx;
}
break;
}
}
if (mymode >= 3 && mymode <= 4) {
RETURN_STRINGL(retstr,retlen,1);
}
}
/* }}} */
Loading…
Cancel
Save