Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

php - array_fill negative indices

Tags:

php

When using php array_fill and negative indices, why does php only fill the first negative indice and then jump to 0.

For example:

array_fill(-4,4,10) should fill -4, -3, -2, -1 and 0 but it does -4, 0, 1, 2, 3

The manual does state this behaviour but not why.

Can anyone say why this is?

like image 334
Marty Wallace Avatar asked Mar 24 '13 21:03

Marty Wallace


1 Answers

Looking at the source for PHP, I can see exactly why they did this!

What they do is create the first entry in the array. In PHP, it looks like:

$a = array(-4 => 10);

Then, they add each new entry like this:

$count--;
while ($count--) {
  $a[] = 10;
}

If you do this exact same thing yourself, you'll see the exact same behavior. A super short PHP script demonstrates this:

<?php
    $a = array(-4 => "Apple");
    $a[] = "Banana";
    print_r($a);
?>

The result: Array ( [-4] => Apple [0] => Banana )

NOTE Yes, I did put in PHP instead of the C source they used, since a PHP programmer can understand that a lot better than the raw source. It's approximately the same effect, however, since they ARE using the PHP functions to generate the results...

like image 183
Mark Ormston Avatar answered Oct 22 '22 10:10

Mark Ormston