I did some more tests this night.
here is my code
var_dump($property['id_hash']);
reset($property['id_hash']);
$k1 = key($property['id_hash']);
end($property['id_hash']);
$k2 = key($property['id_hash']);
echo PHP_EOL;
var_dump($k1 === $k2);
echo "hex k1=".bin2hex($k1).PHP_EOL;
echo "hex k2=".bin2hex($k2).PHP_EOL;
echo PHP_EOL."---".PHP_EOL;
reset($property['id_hash']);
$k1 = key($property['id_hash']);
end($property['id_hash']);
$k2 = key($property['id_hash']);
echo PHP_EOL;
var_dump($k1 === $k2);
echo "hex k1=".bin2hex($k1).PHP_EOL;
echo "hex k2=".bin2hex($k2).PHP_EOL;
echo PHP_EOL."---".PHP_EOL;
here is the result :
array(3) {
[-1]=>
array(0) {
}
[26]=>
array(1) {
[0]=>
int(10588090)
}
[-1]=>
array(1) {
[0]=>
int(10588090)
}
}
bool(true)
hex k1=2d31
hex k2=2d31
[-1]=>
array(0) {
}
[26]=>
array(1) {
[0]=>
int(10588090)
}
[-1]=>
array(1) {
[0]=>
int(10588090)
}
}
bool(true)
hex k1=2d31
hex k2=2d31
it's nuts. I don't understand. It started to happen when I upgrade from php 7.2 to php 8.0
I am running the latest 8.0.16 php version.
the fact is I can't reproduce it, it happens after a few iteration around items. Sometimes it happens, sometimes not.
On Fri, 4 Mar 2022 at 20:15, AllenJB <php.lists@xxxxxxxxxxxxx> wrote:
On 04/03/2022 15:34, Romain Moyne wrote:
> Hi,
>
> working with php 8.0.16, i am meeting a hard bug I can't really explain.
> One of my script populates an array and doing a var_dump I have that :
>
> Notice the duplicate -1 key. It should not exist as php should erase
> the previous key.
>
> array(3) {
> [-1]=>
> array(1) {
> [0]=>
> int(10585779)
> }
> [18]=>
> array(2) {
> [0]=>
> int(10585779)
> [1]=>
> int(10586274)
> }
> [-1]=>
> array(1) {
> [0]=>
> int(10586274)
> }
> }
>
>
> And when doing a json_encode of that, I get that :
> "id_hash":{"-1":[10585779],"18":[10585779,10586274],"-1":[10586274]}
>
>
> I suspected a utf8 misencoding, but it seems it's not.
>
> Any thoughts?
My best guess would be that one or more of the keys contains a
non-printable character, such as a null byte.
You could us bin2hex on the keys to find out what's going on
See for example: https://3v4l.org/BMLMI