summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBob Weinand <bobwei9@hotmail.com>2015-05-26 01:43:56 +0200
committerBob Weinand <bobwei9@hotmail.com>2015-05-26 01:43:56 +0200
commit1a7bf16dd6299bf6a5745f28edf50a44dc83dba2 (patch)
tree10516a0d8eb6f4fc384dc178d4a7d09fa5a7b4f5
parentbb552908a05ba26c2a12cc111a4cdab6a53a4c31 (diff)
downloadphp-git-1a7bf16dd6299bf6a5745f28edf50a44dc83dba2.tar.gz
Ran wrong tests, fixed bug in impl; simplified
-rw-r--r--ext/standard/string.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/ext/standard/string.c b/ext/standard/string.c
index 7dad1b67ff..8d95290ca2 100644
--- a/ext/standard/string.c
+++ b/ext/standard/string.c
@@ -1223,9 +1223,17 @@ PHPAPI void php_implode(const zend_string *delim, zval *arr, zval *return_value)
ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(arr), tmp) {
if (Z_TYPE_P(tmp) == IS_LONG) {
+ double val = Z_LVAL_P(tmp);
*++strptr = NULL;
((zend_long *) (strings + numelems))[strptr - strings] = Z_LVAL_P(tmp);
- len += (int) log10(Z_LVAL_P(tmp) < 0 ? -100 * ((double) Z_LVAL_P(tmp) - 0.001) : 10 * ((double) Z_LVAL_P(tmp) + 0.01));
+ if (val < 0) {
+ val = -10 * val;
+ }
+ if (val < 10) {
+ len++;
+ } else {
+ len += (int) log10(10 * (double) val);
+ }
} else {
*++strptr = zval_get_string(tmp);
len += (*strptr)->len;