2

我正在将 DB2 与我的 PHP 一起使用。DB2 以大写形式返回所有列名。如果我使用 db2_fetch_assoc,那么结果将是这样的

Array { [USERID] => 4 }

但是在我的 php 文件中,像这样分配的数组值及其骆驼风格

$this->userId = $row['userId'];

所以它抛出错误Error : Undefined index userId

我可以使用 array_change_key_case() 函数将数组转换为小写。但是我有数百个文件可以获取和分配数组值。

不可能更改我的所有文件。还有它的linux机器。

那么php中是否有任何功能可以禁用数组键的区分大小写。

4

3 回答 3

3

您可以从SPL扩展ArrayObject。这样至少你只需要“接触”从数据库中获取数据的函数/方法。

$row = getRow();
echo $row['userId'];

function getRow() {
    $row = array ( 'USERID' => 4, 'FOO'=>123, 'BAR'=>456 );
    return new UCArrayObject($row);
}

class UCArrayObject extends ArrayObject
{
    public function offsetExists ($index) { return parent::offsetExists(strtoupper($index)); }
    public function offsetGet($index) { return parent::offsetGet(strtoupper($index)); }
    public function offsetSet ($index, $newval) { parent::offsetSet(strtoupper($index), $newval); }
    public function offsetUnset ($index) { parent::offsetUnset(strtoupper($index)); }
}
于 2011-06-29T06:24:52.410 回答
1

我不了解 DB2,但是如果您在查询中指定行,大多数库都会返回行,因此,您可以或SELECT USERID,以最适合您的方式。SELECT useridSELECT UserId

数组的键永远不区分大小写。

可以编写一个模拟数组的类(查看 PHP.net。您必须实现一个接口才能实现这一点)。您添加到其中的每个值都可以使用键的小写版本添加到内部数组结构中。读取值时,还可以使用指定键的小写版本。这实际上将使您的类表现得像一个不区分大小写的数组。

像这样的类也可以在 for 循环中使用,但不幸的是,它不能传递给实际需要数组参数的函数。

一个不同的解决方案:如果您有相当少量的查询,并且您的数据库层与应用程序的其余部分很好地分开,您可以应用某种翻译。只需遍历生成的数组,并将它们的键映射到您喜欢的特定外壳,使用翻译数组。例如,创建一个包含 ('lowercase'=>'CamelCase') 版本的字段名称的数组。这样,您可以轻松找到名称并为它们找到合适的大小写。使用找到的键,您可以构造一个新数组,然后将其返回给请求代码。

这些键仍然不会区分大小写,但它们将具有您想要的大小写。

于 2011-06-29T06:27:08.087 回答
0

不,没有。PHP 只是不这样做。数组大小写必须根据具体情况进行交换。

于 2011-06-29T06:20:30.417 回答