【问题标题】:Make array keys insensitive in php在php中使数组键不敏感
【发布时间】:2011-06-29 06:11:19
【问题描述】:

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

Array { [USERID] => 4 }

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

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

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

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

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

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

【问题讨论】:

  • 我可以将数组键转换为小写。但是我想再次更改此行中的键 $this->userId = $row['userId'];在我所有的文件中。

标签: php case-sensitive array-key


【解决方案1】:

您可以从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)); }
}

【讨论】:

  • 非常感谢 VolkerK。该解决方案最适合我的项目并减少工作量
【解决方案2】:

我不了解 DB2,但大多数库会在您在查询中指定它们的情况下返回行,因此,您可以SELECT USERIDSELECT useridSELECT UserId,以最适合您的方式。

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

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

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

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

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

【讨论】:

  • 感谢您的建议 GolezTrol
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-08
    • 1970-01-01
    • 2011-07-16
    • 2013-03-24
    • 2016-11-19
    • 2019-01-12
    • 2011-01-22
    • 1970-01-01
    相关资源
    最近更新 更多