在php中使数组键不敏感

时间:2011-06-29 06:11:20

标签: php case-sensitive array-key

我在PHP中使用DB2。 DB2返回UPPERCASE中的所有列名。如果我使用db2_fetch_assoc,那么结果将是这样的

Array { [USERID] => 4 }

但是在我的php文件中,像这样分配的数组值和它在camelstyle中的数据

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

因此它会抛出错误Error : Undefined index userId

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

无法更改我的所有文件。还有它的linux机器。

因此,php中有任何函数可以禁用数组键的区分大小写。

3 个答案:

答案 0 :(得分:3)

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

$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)); }
}

答案 1 :(得分:1)

我不知道DB2,但多数图书馆将在您在查询中指定他们的情况下返回行,所以,你可以SELECT USERIDSELECT useridSELECT UserId,哪个最适合你。

数组的键不是不区分大小写的。

可以编写一个模拟数组的类(在PHP.net上查看。你必须实现一个接口来实现这一点)。您添加到它的每个值都可以使用小写的密钥版本添加到内部数组结构中。读取值时,还可以使用指定键的小写版本。这基本上会使您的类表现为不区分大小写的数组。

像这样的类可用于在for循环过,但不幸的是它不能被传递到实际需要的阵列参数的功能。

有一个不同的解决方案:如果你有疑问的量非常小,并且数据库层是很好的从应用程序的其余部分分开,你可以申请某种形式的翻译。只需遍历生成的数组,并使用转换数组将其键映射到您喜欢的特定外壳。例如。创建一个包含('lowercase'=>'CamelCase')版本字段名称的数组。这样,您可以轻松找到名称并为其找到合适的外壳。使用找到的键,您可以在将其返回到请求代码之前构造一个新数组。

这些键仍然不会区分大小写,但它们会有你想要的外壳。

答案 2 :(得分:0)

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