In my program, I create the $view as an empty array() in index.php, and turn it into a global in the controllers that use it.
Why? If you controller needs the $view
then just pass it in via the constructor or a setter. Dependencies on Globals can always be resolved by using Dependency Injection.
// index.php
$view = array();
$controller = new Controller($view);
$controller->doAction();
Also, please reconsider if the View should be just an array. The View has to be rendered at some point. Rendering is a responsibility I'd see on the View. An array cannot render itself, so I assume you are doing it elsewhere. That would be a violation of the Single Responsibility Principle. I'd rather do something along the lines of (simplified):
// index.php
$view = new View;
$controller = new Controller($view);
$controller->doAction();
// controller.php
...
public function doAction()
{
...
$this->view->setTemplate('/path/to/template');
$this->view->setVar('foo', 'bar');
$this->view->render();
}
...