<?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); 
                } 
            } 
        } 
    } 
} 
 
 |