protected function methodTable($array, $columns = array())
    {
        if (!\is_array($array)) {
            return $this->dump($array);
        }
        $table = array();
        $keys = $columns ?: $this->debug->methodTable->colKeys($array);
        $headerVals = $keys;
        foreach ($headerVals as $i => $val) {
            if ($val === MethodTable::SCALAR) {
                $headerVals[$i] = 'value';
            }
        }
        \array_unshift($headerVals, '');
        $table[] = $headerVals;
        $classNames = array();
        if ($this->debug->abstracter->isAbstraction($array) && $array['traverseValues']) {
            $array = $array['traverseValues'];
        }
        foreach ($array as $k => $row) {
            $values = $this->debug->methodTable->keyValues($row, $keys, $objInfo);
            foreach ($values as $k2 => $val) {
                if ($val === $this->debug->abstracter->UNDEFINED) {
                    $values[$k2] = null;
                }
            }
            $classNames[] = $objInfo['row']
                ? $objInfo['row']['className']
                : '';
            \array_unshift($values, $k);
            $table[] = \array_values($values);
        }
        if (\array_filter($classNames)) {
            \array_unshift($table[0], '');
            // first col is row key.
            // insert classname after key
            foreach ($classNames as $i => $className) {
                \array_splice($table[$i+1], 1, 0, $className);
            }
        }
        return $table;
    }