Hello Christian, patch looks good to me :-)
marcus Saturday, August 16, 2008, 3:56:27 PM, you wrote: > ? ext/standard/tests/x > Index: ext/standard/array.c > =================================================================== > RCS file: /repository/php-src/ext/standard/array.c,v > retrieving revision 1.460 > diff -u -r1.460 array.c > --- ext/standard/array.c 10 Aug 2008 17:49:29 -0000 1.460 > +++ ext/standard/array.c 16 Aug 2008 13:52:29 -0000 > @@ -4354,7 +4354,7 @@ > } > /* }}} */ > > -/* {{{ proto mixed array_reduce(array input, mixed callback [, int initial]) > U > +/* {{{ proto mixed array_reduce(array input, mixed callback [, mixed > initial]) U > Iteratively reduce the array to a single value via the callback. */ > PHP_FUNCTION(array_reduce) > { > @@ -4365,18 +4365,19 @@ > zval *retval; > zend_fcall_info fci; > zend_fcall_info_cache fci_cache = empty_fcall_info_cache; > - long initial; > + zval *initial; > HashPosition pos; > HashTable *htbl; > > - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "af|l", > &input, &fci, &fci_cache, &initial) == FAILURE) { > + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "af|z", > &input, &fci, &fci_cache, &initial) == FAILURE) { > return; > } > > if (ZEND_NUM_ARGS() > 2) { > ALLOC_ZVAL(result); > + *result = *initial; > + zval_copy_ctor(result); > INIT_PZVAL(result); > - ZVAL_LONG(result, initial); > } else { > MAKE_STD_ZVAL(result); > ZVAL_NULL(result); > Index: ext/standard/tests/array/array_reduce.phpt > =================================================================== > RCS file: ext/standard/tests/array/array_reduce.phpt > diff -N ext/standard/tests/array/array_reduce.phpt > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ ext/standard/tests/array/array_reduce.phpt 16 Aug 2008 13:52:29 -0000 > @@ -0,0 +1,79 @@ > +--TEST-- > +Test array_reduce() function > +--INI-- > +precision=14 > +--FILE-- > +<?php > +/* Prototype: array array_reduce(array $array, mixed $callback, mixed > $initial); > + Description: Iteratively reduce the array to a single value via the > callback > +*/ > + > +$array = array('foo', 'foo', 'bar', 'qux', 'qux', 'quux'); > + > +echo "\n*** Testing array_reduce() to integer ***\n"; > +function reduce_int($w, $v) { return $w + strlen($v); } > +$initial = 42; > +var_dump(array_reduce($array, 'reduce_int', $initial), $initial); > + > +echo "\n*** Testing array_reduce() to float ***\n"; > +function reduce_float($w, $v) { return $w + strlen($v) / 10; } > +$initial = 4.2; > +var_dump(array_reduce($array, 'reduce_float', $initial), $initial); > + > +echo "\n*** Testing array_reduce() to string ***\n"; > +function reduce_string($w, $v) { return $w . $v; } > +$initial = 'quux'; > +var_dump(array_reduce($array, 'reduce_string', $initial), $initial); > + > +echo "\n*** Testing array_reduce() to array ***\n"; > +function reduce_array($w, $v) { $w[$v]++; return $w; } > +$initial = array('foo' => 42, 'bar' => 17, 'qux' => -2, 'quux' => 0); > +var_dump(array_reduce($array, 'reduce_array', $initial), $initial); > + > +echo "\n*** Testing array_reduce() to null ***\n"; > +function reduce_null($w, $v) { return $w . $v; } > +$initial = null; > +var_dump(array_reduce($array, 'reduce_null', $initial), $initial); > + > +echo "\nDone"; +?>> > +--EXPECTF-- > +*** Testing array_reduce() to integer *** > +int(61) > +int(42) > + > +*** Testing array_reduce() to float *** > +float(6.1) > +float(4.2) > + > +*** Testing array_reduce() to string *** > +unicode(23) "quuxfoofoobarquxquxquux" > +unicode(4) "quux" > + > +*** Testing array_reduce() to array *** > +array(4) { > + [u"foo"]=> > + int(44) > + [u"bar"]=> > + int(18) > + [u"qux"]=> > + int(0) > + [u"quux"]=> > + int(1) > +} > +array(4) { > + [u"foo"]=> > + int(42) > + [u"bar"]=> > + int(17) > + [u"qux"]=> > + int(-2) > + [u"quux"]=> > + int(0) > +} > + > +*** Testing array_reduce() to null *** > +unicode(19) "foofoobarquxquxquux" > +NULL > + > +Done Best regards, Marcus -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php