Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:94727 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 76223 invoked from network); 27 Jul 2016 14:42:20 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 27 Jul 2016 14:42:20 -0000 Authentication-Results: pb1.pair.com header.from=ben.coutu@zeyos.com; sender-id=pass Authentication-Results: pb1.pair.com smtp.mail=ben.coutu@zeyos.com; spf=pass; sender-id=pass Received-SPF: pass (pb1.pair.com: domain zeyos.com designates 159.122.110.40 as permitted sender) X-PHP-List-Original-Sender: ben.coutu@zeyos.com X-Host-Fingerprint: 159.122.110.40 mx.zeyos.com Received: from [159.122.110.40] ([159.122.110.40:50212] helo=mx.zeyos.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id ED/11-00900-A48C8975 for ; Wed, 27 Jul 2016 10:42:19 -0400 Received: from mx.zeyos.com (mx.zeyos.com [127.0.0.1]) by mx.zeyos.com (Postfix) with ESMTP id B29EA9D for ; Wed, 27 Jul 2016 16:43:38 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at mx.zeyos.com Received: from mx.zeyos.com ([127.0.0.1]) by mx.zeyos.com (mx.zeyos.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Fdy5imMEYYQp for ; Wed, 27 Jul 2016 16:43:25 +0200 (CEST) Received: from 127.0.0.1 (9a.08.9905.ip4.static.sl-reverse.com [5.153.8.154]) by mx.zeyos.com (Postfix) with ESMTPSA id 376759A; Wed, 27 Jul 2016 16:43:23 +0200 (CEST) Date: Wed, 27 Jul 2016 16:42:00 +0200 To: Xinchen Hui , PHP Internals MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Message-ID: <20160727144338.B29EA9D@mx.zeyos.com> Subject: [PHP-DEV] Optimizing =?UTF-8?Q?array=5Freverse=20for=20packed=20hash=20ta?= =?UTF-8?Q?bles=20=28when=20preserve=5Fkeys=3Dfalse=29?= From: ben.coutu@zeyos.com (Benjamin Coutu) Hello Xinchen, Analogue to the array_slice implementation, the array_reverse function coul= d also be optimized for packed hash tables when preserve_keys is false (mos= t common).=0AThe following patch should do just that: =0Aif (!preserve_keys && (Z_ARRVAL_P(input)->u.flags & HASH_FLAG_PACKED)) { =09zend_hash_real_init(Z_ARRVAL_P(return_value), 1); =09 =09ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(return_value)) { =09=09ZEND_HASH_REVERSE_FOREACH_VAL(Z_ARRVAL_P(input), entry) { =09=09=09ZEND_HASH_FILL_ADD(entry); =09=09=09zval_add_ref(entry); =09=09} ZEND_HASH_FOREACH_END(); =09} ZEND_HASH_FILL_END(); }=0A Please let me know your thoughts. Thanks, Ben --=20 Bejamin Coutu ben.coutu@zeyos.com ZeyOS, Inc. http://www.zeyos.com