If you did something like this to make your constructor multidimensional capable you will have some trouble using getArrayCopy to get a plain array straight out of the method:
<?php
public function __construct( $array = array(), $flags = 2 )
{
    // let’s give the objects the right and not the inherited name
    $class = get_class($this);
    foreach($array as $offset => $value)
        $this->offsetSet($offset, is_array($value) ? new $class($value) : $value);
    $this->setFlags($flags); 
}
?>
That’s the way I solved it:
<?php
public function getArray($recursion = false) 
{
    // just in case the object might be multidimensional
    if ( $this === true)
        return $this->getArrayCopy();
    return array_map( function($item){
        return is_object($item) ? $item->getArray(true) : $item;
    }, $this->getArrayCopy() );
}
?>
Hope this was useful!