JmesPath\TreeCompiler::visit_projection PHP Method

visit_projection() private method

private visit_projection ( array $node )
$node array
    private function visit_projection(array $node)
    {
        $val = $this->makeVar('val');
        $collected = $this->makeVar('collected');
        $this->write('// Visiting projection node')->dispatch($node['children'][0])->write('');
        if (!isset($node['from'])) {
            $this->write('if (!is_array($value) || !($value instanceof \\stdClass)) { $value = null; }');
        } elseif ($node['from'] == 'object') {
            $this->write('if (!Utils::isObject($value)) { $value = null; }');
        } elseif ($node['from'] == 'array') {
            $this->write('if (!Utils::isArray($value)) { $value = null; }');
        }
        $this->write('if ($value !== null) {')->indent()->write('%s = [];', $collected)->write('foreach ((array) $value as %s) {', $val)->indent()->write('$value = %s;', $val)->dispatch($node['children'][1])->write('if ($value !== null) {')->indent()->write('%s[] = $value;', $collected)->outdent()->write('}')->outdent()->write('}')->write('$value = %s;', $collected)->outdent()->write('}');
        return $this;
    }