mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
str_shuffle() function added. Like shuffle() for arrays - however the
algorithm for creating the permutation is quite simple. More like the implementation of shuffle() for 4.2.1 .
This commit is contained in:
parent
c9b9e63ea3
commit
fc46a46b06
3 changed files with 35 additions and 0 deletions
|
@ -329,6 +329,7 @@ function_entry basic_functions[] = {
|
|||
PHP_FE(strstr, NULL)
|
||||
PHP_FE(stristr, NULL)
|
||||
PHP_FE(strrchr, NULL)
|
||||
PHP_FE(str_shuffle, NULL)
|
||||
|
||||
#ifdef HAVE_STRCOLL
|
||||
PHP_FE(strcoll, NULL)
|
||||
|
|
|
@ -82,6 +82,7 @@ PHP_FUNCTION(strnatcasecmp);
|
|||
PHP_FUNCTION(substr_count);
|
||||
PHP_FUNCTION(str_pad);
|
||||
PHP_FUNCTION(sscanf);
|
||||
PHP_FUNCTION(str_shuffle);
|
||||
#ifdef HAVE_STRCOLL
|
||||
PHP_FUNCTION(strcoll);
|
||||
#endif
|
||||
|
|
|
@ -3933,6 +3933,39 @@ PHP_FUNCTION(str_rot13)
|
|||
/* }}} */
|
||||
|
||||
|
||||
static int php_string_shuffle(const void *a, const void *b TSRMLS_DC)
|
||||
{
|
||||
long rnd;
|
||||
rnd = php_rand(TSRMLS_C);
|
||||
if (rnd % 3)
|
||||
return 1;
|
||||
else if (rnd % 5)
|
||||
return 0;
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* {{{ proto string str_shuffle(string str)
|
||||
Shuffles string. One permutation of all possible is created */
|
||||
PHP_FUNCTION(str_shuffle)
|
||||
{
|
||||
/* Note : by using current php_string_shuffle for string */
|
||||
/* with 6 chars (6! permutations) about 2/3 of them are */
|
||||
/* computed for 6! calls for the function. So it isn't so */
|
||||
/* unique. The ratio is the same for other lengths. */
|
||||
char *str;
|
||||
int i, str_len;
|
||||
|
||||
i = 0;
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
zend_qsort((void *)str, str_len, sizeof(char), php_string_shuffle TSRMLS_CC);
|
||||
RETURN_STRINGL(str, str_len, 1);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
#if HAVE_STRFMON
|
||||
/* {{{ proto string money_format(string format , float value)
|
||||
Convert monetary value(s) to string */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue