我们最近更新了所有数据库表以使用统一的命名约定(我们的旧表一团糟)。在某些情况下,我们仍然需要在旧表和新表之间进行通信。我的任务是编写一个类,将旧表名和列名转换为新的,反之亦然。
理想情况下,我将有一个双向数组来执行此操作,但我认为 PHP 中不存在。所以我个人可以想到以下两种方式来做到这一点:
只需写出两个大数组,一个将旧名称映射到新名称,一个将新名称映射到旧名称。
从单个列表创建对象时动态创建两个数组
有没有其他方法可以做到这一点,每种方法的优缺点是什么?
我们最近更新了所有数据库表以使用统一的命名约定(我们的旧表一团糟)。在某些情况下,我们仍然需要在旧表和新表之间进行通信。我的任务是编写一个类,将旧表名和列名转换为新的,反之亦然。
理想情况下,我将有一个双向数组来执行此操作,但我认为 PHP 中不存在。所以我个人可以想到以下两种方式来做到这一点:
只需写出两个大数组,一个将旧名称映射到新名称,一个将新名称映射到旧名称。
从单个列表创建对象时动态创建两个数组
有没有其他方法可以做到这一点,每种方法的优缺点是什么?
我想我会向一个函数发送一个参数,该函数告诉将要使用什么数据库,并分配用于新数据库的值,并在要使用旧数据库时分配其他值。
<?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...
}
?>
我最终做的是创建一个带有一个名为 newToOldArray 的变量的类,并在代码中列出以新名称作为键、旧名称作为值的数组。所以我不必再次反向写出整个数组来创建oldToNewArray,我在构造函数中使用了php函数array_flip()(我刚刚找到)来创建另一个变量。
如果我更改了一个值而不更改另一个值,这种方法使我不必担心两个数组会不同步。它还节省了文件大小和再次输入的时间。我还可以在需要时查看该表作为参考。