protected function analyzeData($data)
{
$isCollection = true;
$isEmpty = true;
$traversableData = null;
$isOk = is_array($data) === true || is_object($data) === true || $data === null;
$isOk ?: Exceptions::throwInvalidArgument('data', $data);
if (is_array($data) === true) {
/** @var array $data */
$isEmpty = empty($data);
$traversableData = $data;
} elseif ($data instanceof Iterator && ($iterator = $data) !== null || $data instanceof IteratorAggregate && ($iterator = $data->getIterator()) !== null) {
/** @var Iterator $iterator */
$iterator->rewind();
$isEmpty = $iterator->valid() === false;
if ($isEmpty === false) {
$traversableData = $data;
} else {
$traversableData = [];
}
} elseif (is_object($data) === true) {
/** @var object $data */
$isEmpty = $data === null;
$isCollection = false;
$traversableData = [$data];
} elseif ($data === null) {
$isCollection = false;
$isEmpty = true;
}
return [$isEmpty, $isCollection, $traversableData];
}