private function parseArray(array &$var, BasicObject $o)
    {
        $array = new BasicObject();
        $array->transplant($o);
        $array->size = \count($var);

        if (isset($var[$this->marker])) {
            --$array->size;
            $array->hints[] = 'recursion';

            $this->applyPlugins($var, $array, self::TRIGGER_RECURSION);

            return $array;
        }

        $rep = new Representation('Contents');
        $rep->implicit_label = true;
        $array->addRepresentation($rep);
        $array->value = $rep;

        if (!$array->size) {
            $this->applyPlugins($var, $array, self::TRIGGER_SUCCESS);

            return $array;
        }

        if ($this->depth_limit && $o->depth >= $this->depth_limit) {
            $array->hints[] = 'depth_limit';

            $this->applyPlugins($var, $array, self::TRIGGER_DEPTH_LIMIT);

            return $array;
        }

        $copy = \array_values($var);

        // It's really really hard to access numeric string keys in arrays,
        // and it's really really hard to access integer properties in
        // objects, so we just use array_values and index by counter to get
        // at it reliably for reference testing. This also affects access
        // paths since it's pretty much impossible to access these things
        // without complicated stuff you should never need to do.
        $i = 0;

        // Set the marker for recursion
        $var[$this->marker] = $array->depth;

        $refmarker = new stdClass();

        foreach ($var as $key => &$val) {
            if ($key === $this->marker) {
                continue;
            }

            $child = new BasicObject();
            $child->name = $key;
            $child->depth = $array->depth + 1;
            $child->access = BasicObject::ACCESS_NONE;
            $child->operator = BasicObject::OPERATOR_ARRAY;

            if (null !== $array->access_path) {
                if (\is_string($key) && (string) (int) $key === $key) {
                    $child->access_path = 'array_values('.$array->access_path.')['.$i.']'; // @codeCoverageIgnore
                } else {
                    $child->access_path = $array->access_path.'['.\var_export($key, true).']';
                }
            }

            $stash = $val;
            $copy[$i] = $refmarker;
            if ($val === $refmarker) {
                $child->reference = true;
                $val = $stash;
            }

            $rep->contents[] = $this->parse($val, $child);
            ++$i;
        }

        $this->applyPlugins($var, $array, self::TRIGGER_SUCCESS);
        unset($var[$this->marker]);

        return $array;
    }
private function parseArray(array &$var, BasicObject $o)
    {
        $array = new BasicObject();
        $array->transplant($o);
        $array->size = \count($var);

        if (isset($var[$this->marker])) {
            --$array->size;
            $array->hints[] = 'recursion';

            $this->applyPlugins($var, $array, self::TRIGGER_RECURSION);

            return $array;
        }

        $rep = new Representation('Contents');
        $rep->implicit_label = true;
        $array->addRepresentation($rep);
        $array->value = $rep;

        if (!$array->size) {
            $this->applyPlugins($var, $array, self::TRIGGER_SUCCESS);

            return $array;
        }

        if ($this->depth_limit && $o->depth >= $this->depth_limit) {
            $array->hints[] = 'depth_limit';

            $this->applyPlugins($var, $array, self::TRIGGER_DEPTH_LIMIT);

            return $array;
        }

        $copy = \array_values($var);

        // It's really really hard to access numeric string keys in arrays,
        // and it's really really hard to access integer properties in
        // objects, so we just use array_values and index by counter to get
        // at it reliably for reference testing. This also affects access
        // paths since it's pretty much impossible to access these things
        // without complicated stuff you should never need to do.
        $i = 0;

        // Set the marker for recursion
        $var[$this->marker] = $array->depth;

        $refmarker = new stdClass();

        foreach ($var as $key => &$val) {
            if ($key === $this->marker) {
                continue;
            }

            $child = new BasicObject();
            $child->name = $key;
            $child->depth = $array->depth + 1;
            $child->access = BasicObject::ACCESS_NONE;
            $child->operator = BasicObject::OPERATOR_ARRAY;

            if (null !== $array->access_path) {
                if (\is_string($key) && (string) (int) $key === $key) {
                    $child->access_path = 'array_values('.$array->access_path.')['.$i.']'; // @codeCoverageIgnore
                } else {
                    $child->access_path = $array->access_path.'['.\var_export($key, true).']';
                }
            }

            $stash = $val;
            $copy[$i] = $refmarker;
            if ($val === $refmarker) {
                $child->reference = true;
                $val = $stash;
            }

            $rep->contents[] = $this->parse($val, $child);
            ++$i;
        }

        $this->applyPlugins($var, $array, self::TRIGGER_SUCCESS);
        unset($var[$this->marker]);

        return $array;
    }
private function parseArray ( array & $ var , BasicObject $ o ) { $ array = new BasicObject ( ) ; $ array -> transplant ( $ o ) ; $ array -> size = \ count ( $ var ) ; if ( isset ( $ var [ $ this -> marker ] ) ) { -- $ array -> size ; $ array -> hints [ ] = 'recursion' ; $ this -> applyPlugins ( $ var , $ array , self :: TRIGGER_RECURSION ) ; return $ array ; } $ rep = new Representation ( 'Contents' ) ; $ rep -> implicit_label = true ; $ array -> addRepresentation ( $ rep ) ; $ array -> value = $ rep ; if ( ! $ array -> size ) { $ this -> applyPlugins ( $ var , $ array , self :: TRIGGER_SUCCESS ) ; return $ array ; } if ( $ this -> depth_limit && $ o -> depth >= $ this -> depth_limit ) { $ array -> hints [ ] = 'depth_limit' ; $ this -> applyPlugins ( $ var , $ array , self :: TRIGGER_DEPTH_LIMIT ) ; return $ array ; } $ copy = \ array_values ( $ var ) ; // It's really really hard to access numeric string keys in arrays, // and it's really really hard to access integer properties in // objects, so we just use array_values and index by counter to get // at it reliably for reference testing. This also affects access // paths since it's pretty much impossible to access these things // without complicated stuff you should never need to do. $ i = 0 ; // Set the marker for recursion $ var [ $ this -> marker ] = $ array -> depth ; $ refmarker = new stdClass ( ) ; foreach ( $ var as $ key => & $ val ) { if ( $ key === $ this -> marker ) { continue ; } $ child = new BasicObject ( ) ; $ child -> name = $ key ; $ child -> depth = $ array -> depth + 1 ; $ child -> access = BasicObject :: ACCESS_NONE ; $ child -> operator = BasicObject :: OPERATOR_ARRAY ; if ( null !== $ array -> access_path ) { if ( \ is_string ( $ key ) && ( string ) ( int ) $ key === $ key ) { $ child -> access_path = 'array_values(' . $ array -> access_path . ')[' . $ i . ']' ; // @codeCoverageIgnore } else { $ child -> access_path = $ array -> access_path . '[' . \ var_export ( $ key , true ) . ']' ; } } $ stash = $ val ; $ copy [ $ i ] = $ refmarker ; if ( $ val === $ refmarker ) { $ child -> reference = true ; $ val = $ stash ; } $ rep -> contents [ ] = $ this -> parse ( $ val , $ child ) ; ++ $ i ; } $ this -> applyPlugins ( $ var , $ array , self :: TRIGGER_SUCCESS ) ; unset ( $ var [ $ this -> marker ] ) ; return $ array ; }
Parses an array into a Kint object structure.

@param array       $var The input variable
@param BasicObject $o   The base object

@return BasicObject
Parses an array into a Kint object structure .