MySQL模式转换为PHP关联数组

时间:2016-11-20 00:19:27

标签: php arrays pdo

我确信这次之前已经完成了很多次,但我找不到简单的解决方案,可能是因为我很难把它包围起来。上下文是一个自定义PDO包装器。

摘要:我想生成一个两级(?)数组schema,以便以两种方式轻松访问MySQL表架构:

  1. 列类型/ null /默认按列名称(类似`schema ['fieldname'] ['null'])。
  2. 用于与array_intersect一起验证查询字段的字段数组(可能由array_keys(schema)生成)。
  3. 详细信息:

    $schema = $pdo->run("DESCRIBE " . $tablename);
    (magic happens here)
    // validate input field array by field names
    $queryfields = array_intersect(array_keys($schema), $inputdata;
    // check format of input data
    foreach ($schema as $column => $key) {
      if ($column['type'] == 'datetime') {
        $inputdata[$key] = date_format($inputdata[$key], 'yyyy-mm-dd');
      }
    }
    

    不要陷入细节之中。基本上我想将一个平面阵列数组转换成相同的东西,但按列名称分组。

1 个答案:

答案 0 :(得分:0)

好的,我有一个答案。也许有更快/更好的方法做到这一点并不涉及实际走过数组,但也许这是最好的方法。

$schema = array();
$rows = $pdo->query("DESCRIBE " . $table);
// refactor array of associative arrays using column name as key
foreach ($rows as $row) {
  // pull off the first key-value which is the column name
  $key = array_shift($row);
  // add the rest of the array to $schema with the column name as the key
  $schema[$key] = $row;
}