0

我们最近更新了所有数据库表以使用统一的命名约定(我们的旧表一团糟)。在某些情况下,我们仍然需要在旧表和新表之间进行通信。我的任务是编写一个类,将旧表名和列名转换为新的,反之亦然。

理想情况下,我将有一个双向数组来执行此操作,但我认为 PHP 中不存在。所以我个人可以想到以下两种方式来做到这一点:

  1. 只需写出两个大数组,一个将旧名称映射到新名称,一个将新名称映射到旧名称。

  2. 从单个列表创建对象时动态创建两个数组

有没有其他方法可以做到这一点,每种方法的优缺点是什么?

4

2 回答 2

1

我想我会向一个函数发送一个参数,该函数告诉将要使用什么数据库,并分配用于新数据库的值,并在要使用旧数据库时分配其他值。

<?php
function dosql($newDb = true) {
   if ($newDb === true) {
       //Fields used when using new db
       $fieldArray = array('id', 'another field');   
       $tableName = 'newTable';
   }
   else {
       //Fields used when using old db
       $fieldArray = array('old_id', 'another old field');
       $tableName = 'oldTable';
   }

   //example - would be select id, another field from newTable where id=5 if $newDb = true
   $sql = "select " . implode(',', $fieldArray) . " from " . $tableName . " where " . $fieldArray[0] . " =5"; 

  //And of course do the actual db-operations...

}
?>
于 2013-04-25T07:44:58.140 回答
0

我最终做的是创建一个带有一个名为 newToOldArray 的变量的类,并在代码中列出以新名称作为键、旧名称作为值的数组。所以我不必再次反向写出整个数组来创建oldToNewArray,我在构造函数中使用了php函数array_flip()(我刚刚找到)来创建另一个变量。

如果我更改了一个值而不更改另一个值,这种方法使我不必担心两个数组会不同步。它还节省了文件大小和再次输入的时间。我还可以在需要时查看该表作为参考。

于 2013-04-29T22:39:16.963 回答