多维数组迭代,我的眼睛交叉了


Multidimension array iterating -- my eyes have crossed

我有这样的代码:

    try {
                $this->_connect = new PDO(DB_TYPE.':host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASS);
                $this->_connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                $stmt = $this->_connect->query('SHOW TABLES FROM '.DB_NAME, PDO::FETCH_ASSOC);
                    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
                        foreach ($row as $key => $value) {
                            $this->_schema[$value] = "";
                            }
                        }
                foreach ($this->_schema as $key => $value) {
                    $stmt = $this->_connect->query('SELECT COLUMN_NAME, DATA_TYPE, COLUMN_DEFAULT, CHARACTER_MAXIMUM_LENGTH '.
                                       "FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = '$key'");
                    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
                        $this->_schema[$key][] = $row;
                        }
                    }
                foreach ($this->_schema as $key => $value) {
                    $colData = null;
                    foreach ($this->_schema[$key] as $keyTwo => $valueTwo) {
                        foreach ($this->_schema[$key][$keyTwo] as $keyThree => $valueThree) {
                            $colData[][$keyThree] = $valueThree;
                            }
                        }
                    $this->$key = new Table($colData);
                    }
                }
        catch(PDOException $e) {
            echo $e->getMessage();
            }
        if (isset($stmt))
            $stmt->closeCursor();
        }
    }
Class Table {
    public $select;
    public $update;
    public $delete;
    public $insert;
    public $replace;
    private $_columns;
    public function __construct($colData) {
        $this->select = new Select;
        $this->update = new Update;
        $this->delete = new Delete;
        $this->insert = new Insert;
        $this->replace = new Replace;
        $this->_columns = $colData;
        var_dump($this->_columns[0]);
        }

它试图从数据库中获取整个模式。当我var_dump它时,$this->_schema看起来很好,所以我认为问题是在它完成之后。我试图遍历数据库,获取每个表的元数据并将该数据存储在数组中。然后,对数组进行迭代,为每个表创建一个新的Table对象,并向它发送我提取的列数据数组。我今天大部分时间都在看这段代码,不知道我哪里出错了。

当我在最后一行变量dump时,它是这样转储的:

array(1) { ["COLUMN_NAME"]=> string(4) "type" } array(1) { ["COLUMN_NAME"]=> string(8) "username" } array(1) { ["COLUMN_NAME"]=> string(2) "id" } 

是错误的——它是表1的列名,列1;表2,列1;表3,第1列。它应该是表1第1列的名称、数据类型、默认值和最大长度。

谁能看到我哪里错了或建议一个更好的方法去做这个?

我终于修复了它。我取出了第三个foreach(不必要的),并将$keyTwo下的整个数组分配给$colData[$keyTwo],它按照我的计划工作。