Edit report at https://bugs.php.net/bug.php?id=48858&edit=1
ID: 48858 Comment by: cmbecker69 at gmx dot de Reported by: justin dot carlson at gmail dot com Summary: array item definition problem (regression!) Status: Verified Type: Bug Package: Scripting Engine problem Operating System: * PHP Version: 5.3.0 Block user comment: N Private report: N New Comment: According to <http://3v4l.org/ahcBe> this behavior has already been fixed with PHP 5.3.7. Previous Comments: ------------------------------------------------------------------------ [2009-12-08 08:36:54] mp at webfactory dot de The problem only occurs when the array is initialized in the variable declaration statement in the class AND class constants (with identical values) are used as keys. ------------------------------------------------------------------------ [2009-07-09 14:37:30] justin dot carlson at gmail dot com I've confirmed this in Linux as well. The following works fine: <?php define('a',1); define('b',1); $test = array(a => 'foo', b => 'bar'); print_R($test); ?> So, it may be related to class constants? ------------------------------------------------------------------------ [2009-07-09 07:25:39] sjoerd-php at linuxonly dot nl Thank you for your bug report. I was able to reproduce the problem and make the testcase somewhat simpler: <?php class Foo { const A = 1; const D = 1; public static $sample = array( self::A => 'First', self::D => 'Last' ); } print_r(Foo::$sample); ?> ------------------------------------------------------------------------ [2009-07-08 22:15:10] justin dot carlson at gmail dot com Description: ------------ Array items are not as defined when using the same key twice. I have not yet tested this outside of a class. Reproduce code: --------------- <?php Foo::Bar(); abstract class Foo { const A = 1; const B = 2; const C = 3; const D = 1; protected static $sample = array( self::A => 'Apple', self::B => 'Boy', self::C => 'Cat', self::D => 'Dog' ); public static function Bar() { print_R( self::$sample ); } } ?> Expected result: ---------------- In PHP 5.2.x: Array ( [2] => Boy [3] => Cat [1] => Dog ) This is what I would expect to be valid, as the 2nd entry would override the first, making "Dog" the correct value for index 1. Actual result: -------------- In PHP 5.3.x: Array ( [1] => Apple [2] => Boy [3] => Cat ) This was not expected, as the 1st entry maintained it's value. ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=48858&edit=1