Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:40016 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 82488 invoked from network); 20 Aug 2008 16:40:22 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 20 Aug 2008 16:40:22 -0000 Authentication-Results: pb1.pair.com smtp.mail=mls@pooteeweet.org; spf=permerror; sender-id=unknown Authentication-Results: pb1.pair.com header.from=mls@pooteeweet.org; sender-id=unknown Received-SPF: error (pb1.pair.com: domain pooteeweet.org from 88.198.8.16 cause and error) X-PHP-List-Original-Sender: mls@pooteeweet.org X-Host-Fingerprint: 88.198.8.16 bigtime.backendmedia.com Linux 2.6 Received: from [88.198.8.16] ([88.198.8.16:50046] helo=bigtime.backendmedia.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 95/A4-57622-4F84CA84 for ; Wed, 20 Aug 2008 12:40:21 -0400 Received: from localhost (unknown [127.0.0.1]) by bigtime.backendmedia.com (Postfix) with ESMTP id 5D5E2414400B; Wed, 20 Aug 2008 16:42:45 +0000 (UTC) X-Virus-Scanned: amavisd-new at backendmedia.com Received: from bigtime.backendmedia.com ([127.0.0.1]) by localhost (bigtime.backendmedia.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 7UHAbGbiytIg; Wed, 20 Aug 2008 18:42:44 +0200 (CEST) Received: from [192.168.0.151] (77-57-23-243.dclient.hispeed.ch [77.57.23.243]) (using TLSv1 with cipher AES128-SHA (128/128 bits)) (No client certificate requested) (Authenticated sender: mls@pooteeweet.org) by bigtime.backendmedia.com (Postfix) with ESMTP id B67204144009; Wed, 20 Aug 2008 18:42:43 +0200 (CEST) To: Marcus Boerger In-Reply-To: <1887812365.20080817113025@marcus-boerger.de> X-Priority: 3 (Normal) References: <8A963872-3893-4944-A5BF-C227421C095B@cschneid.com> <603701944.20080410140201@marcus-boerger.de> <215985D5-981D-43A2-9D25-34C132F3DC20@cschneid.com> <1887812365.20080817113025@marcus-boerger.de> Message-ID: <5AEAB8D9-A9A8-4528-A4C0-947178FA471E@pooteeweet.org> Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v928.1) Date: Wed, 20 Aug 2008 18:38:15 +0200 Cc: Christian Schneider , PHP Developers Mailing List , =?ISO-8859-1?Q?Johannes_Schl=FCter?= X-Mailer: Apple Mail (2.928.1) Subject: Re: [PHP-DEV] [PATCH] Allow mixed $initial in array_reduce From: mls@pooteeweet.org (Lukas Kahwe Smith) Hey, Has this been commited yet? Just wanted to give the blessing of the two RMs .. regards, Lukas On 17.08.2008, at 11:30, Marcus Boerger wrote: > 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-- >> +> +/* 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 > Lukas Kahwe Smith mls@pooteeweet.org