将数组键更改为小写

时间:2016-08-20 21:33:54

标签: php arrays

我正在寻找一个漂亮的PHP解决方案来取代标准的forloop。我根本不关心我的规范化方法的内部工作原理。

这是我的代码:

$pairs=[];
foreach($items as $key => $val){
    $key = $this->normalizeKey($key);
    $pairs[$key] = $val;
}

private function normalizeKey($key)
{
    // lowercase string
    $key = strtolower($key);

    // return normalized key
    return $key;
}   

我想更好地学习PHP语言。我认为array_walk会很好用,但是它会对值而不是键进行操作。

我正在寻找可以执行此代码而不是foreach循环的PHP数组方法。

3 个答案:

答案 0 :(得分:7)

您需要array_change_key_case

$pairs = array_change_key_case($items);

答案 1 :(得分:0)

只是为了好玩,虽然它需要三个功能。您可以将strtolower()替换为array_change_key_case()

$pairs = array_combine(array_map('strtolower', array_keys($items)), $items);
  • $items
  • 获取密钥
  • 将键数组映射到strtolower()
  • 将新密钥与$items
  • 组合在一起

如果您需要更复杂的东西,也可以使用匿名函数作为回调。这会将-something附加到每个密钥:

$pairs = array_combine(array_map(function ($v) {
                                     return $v . '-something';
                                 },
                       array_keys($items)), $items);

答案 2 :(得分:-1)

使用引用,您可以使用array_walk实现相同的目标。

像这样:

array_walk(array_keys($a), function ($k) use (&$items) {
    $value = $items[$k];
    unset($items[$k]);
    $items[$this->normalizeKey($k)] = $value;
});

您可以将其应用于foreach