In your first example:
foreach($myArray as $myData) {
$myVariable = 'x';
}
$myVariable is created during the first iteration and than overwritten on each further iteration. It will not be destroyed at any time before leaving the scope of your script, function, method, ...
In your second example:
$myVariable;
foreach($myArray as $myData) {
$myVariable = 'x';
}
$myVariable is created before any iteration and set to null. During each iteration if will be overwritten. It will not be destroyed at any time before leaving the scope of your script, function, method, ...
Update
I missed to mention the main difference. If $myArray is empty (count($myArray) === 0) $myVariable will not be created in your first example, but in your second it will with a value of null.
unsetting it.foreachis nothing special here.