src/Filters/RecursiveFilter.php
<?php
/**
* JSONPath implementation for PHP.
*
* @license https://github.com/SoftCreatR/JSONPath/blob/main/LICENSE MIT License
*/
namespace Flow\JSONPath\Filters;
use Flow\JSONPath\AccessHelper;
use Flow\JSONPath\JSONPathException;
class RecursiveFilter extends AbstractFilter
{
/**
* @throws JSONPathException
*/
public function filter($collection): array
{
$result = [];
$this->recurse($result, $collection);
return $result;
}
/**
* @throws JSONPathException
*/
private function recurse(array &$result, array|object $data): void
{
$result[] = (array)$data;
if (AccessHelper::isCollectionType($data)) {
foreach (AccessHelper::arrayValues($data) as $value) {
if (AccessHelper::isCollectionType($value)) {
$this->recurse($result, $value);
}
}
}
}
}