Question: Is there a difference in speed between declaring an array variable before using it on the foreach loop?

e.g.

```
$variable = [1, 2, 3];

foreach ($variable as $value) {}

VS

foreach ([1, 2, 3] as $value) {}

```

Answer: 
I did a small experiment

```
function measure($time, $func)
{
    $before = microtime(true);
    for($i = 0; $i < $time; $i++) $func();
    $after = microtime(true);
    return $after - $before;
}

var_dump(measure(10000000, function() {
    $variable = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    foreach ($variable as $value) {}
}));  // 7.677169084549

var_dump(measure(10000000, function() {
    foreach ([1, 2, 3, 4, 5, 6, 7, 8, 9, 10] as $value) {}
})); // 6.7569959163666

```

There are not much different in the speed.
PHP creates a copy or caches the array, so for example doing this can expose this behaviour

```
$array = array("1" => "PHP code tester Sandbox Online",  
    "foo" => "bar", 5 , 5 => 89009, 
    "case" => "Random Stuff: " . rand(100,999),
    "PHP Version" => phpversion()
);

foreach( $array as $key => $value ){
   echo "Key: $key\n";
   if($key == "1") unset($array["case"]);   
}

print_r($array);

```

Outputs:

```
Key: 1
Key: foo
Key: 2
Key: 5
Key: case  //<-- what is this doing here
Key: PHP Version
Array
(
    [1] => PHP code tester Sandbox Online
    [foo] => bar
    [2] => 5
    [5] => 89009
    [PHP Version] => 5.6.18
)

```

Now what we see here is on index 1 we unset the key `case` and indeed it is not in the output of the array, however, we still get to loop the item. Now if you update the value by reference with 

```
foreach( $array as $key => &$value ){

///...

```

This disappears 

```
Key: 1
Key: foo
Key: 2
Key: 5
Key: PHP Version
Array
(
    [1] => PHP code tester Sandbox Online
    [foo] => bar
    [2] => 5
    [5] => 89009
    [PHP Version] => 5.6.18
)

```

You can try it in this [sandbox](http://sandbox.onlinephpfunctions.com/code/fb4945e223377d6b772a3094c79c496c317812f3)

So what we learned from this is that during the first example, PHP has copied or cached the array data internally, so when we make the change to it's structure the foreach doesn't realize this. Because of this, your only extra cost is the variable assignment for the original array. So it doesn't really matter much if you create the array in the foreach, in a variable or in a method as the cost to do that compared to creating it in the foreach is very minor. 

There is no extra per loop assignment, when creating it in the foreach or when calling a method in the foreach (this made more sense when i thought about it then when I say it). Basically it is not like when you call `for($i=0; $i < count($b); $i++)` where in this case `count` would be done on each iteration.