Doctrine DBAL 2: fetchAll() unnecessary array dimensions

This answer has been edited because this answer is correct.

You can use the FETCH_COLUMN fetch mode in fetchAll():

$stmt->fetchAll(\PDO::FETCH_COLUMN)

As another user points out in the comments, fetchAll() can return data formatted in a multitude of interesting formats.

Or you can iterate with fetchColumn():

while($page_url = $stmt->fetchColumn()) { 
    echo $page_url . PHP_EOL;
}

You can pass a fetch mode parameter to fetchAll().

$stmt->fetchAll(\PDO::FETCH_COLUMN)

As of PHP5.5 you could use aray_column to achieve required result like so:

<?php
$connection = $this->getDatabaseConnection();

$sql =  "SELECT page_url
           FROM cms_user_page
          WHERE site_id = :siteid
            AND active = '1'
    ";

$stmt = $connection->prepare($sql);
$stmt->bindValue("siteid", $id);
$stmt->execute(); 
$data = array_column($stmt->fetchAll(), 'page_url');

return $data;

If you have more than one case where you need that form of result, although i dont really understand the sense too, you could implement AbstractHydrator interface to create your own ArrayHydrator that returns the structure as you need it.

Hydration Classes reside in NS:

Doctrine\ORM\Internal\Hydration