WordPress Version: 6.1
/**
* Returns an array containing the references of
* the passed blocks and their inner blocks.
*
* @since 5.9.0
* @access private
*
* @param array $blocks array of blocks.
* @return array block references to the passed blocks and their inner blocks.
*/
function _flatten_blocks(&$blocks)
{
$all_blocks = array();
$queue = array();
foreach ($blocks as &$block) {
$queue[] =& $block;
}
while (count($queue) > 0) {
$block =& $queue[0];
array_shift($queue);
$all_blocks[] =& $block;
if (!empty($block['innerBlocks'])) {
foreach ($block['innerBlocks'] as &$inner_block) {
$queue[] =& $inner_block;
}
}
}
return $all_blocks;
}