- if ( is_array($settings) ) {
- foreach ( array_keys($settings) as $number ) {
- if ( is_numeric($number) ) {
- $this->_set($number);
- $this->_register_one($number);
+ // When $settings is an array-like object, get an intrinsic array for use with array_keys().
+ if ( $settings instanceof ArrayObject || $settings instanceof ArrayIterator ) {
+ $settings = $settings->getArrayCopy();
+ }
+
+ if ( is_array( $settings ) ) {
+ foreach ( array_keys( $settings ) as $number ) {
+ if ( is_numeric( $number ) ) {
+ $this->_set( $number );
+ $this->_register_one( $number );