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