如何使用不区分大小写的索引访问php数组中的值。 像
$x = array('a'=>'ddd');
使用$ x ['A'];
访问它的任何函数答案 0 :(得分:6)
这不是字符串/数组在PHP中的工作方式。
在PHP中, "a"
和"A"
是两个不同的字符串。
数组键是整数或字符串。
因此,$a["a"]
和$a["A"]
指向数组中的两个不同条目。
您有两种可能的解决方案:
在第一种情况下,每次要访问数组项时都必须使用strtolower()
:
$array[strtolower('KEY')] = 153;
echo $array[strtolower('KEY')];
在第二种情况下,像这样的mabe可能会起作用:
(嗯,这是一个未经过测试的想法;但它可能会以你为基础)
if (isset($array['key'])) {
// use the value -- found by key-access (fast)
}
else {
// search for the key -- looping over the array (slow)
foreach ($array as $upperKey => $value) {
if (strtolower($upperKey) == 'key') {
// You've found the correct key
// => use the value
}
}
}
但是,这又是一个糟糕的解决方案!
答案 1 :(得分:4)
我会在这里使用OOP,扩展ArrayObject或实现ArrayAcess,然后在偏移方法中使用相关的字符串函数来匹配任何一种情况。
这是AFAIK 唯一方式,可以使用$x['A'];
语法访问它。
当然,我对优化速度没有兴趣。您应该决定速度或可读代码是否是您的主要目标。
示例:
class MyArray extends ArrayObject {
public function offsetGet($index) {
if ($this->offsetExists($index)) {
return parent::offsetGet($index);
}
if ($this->offsetExists(strtolower($index))) {
return parent::offsetGet(strtolower($index));
}
if ($this->offsetExists(strtoupper($index))) {
return parent::offsetGet(strtoupper($index));
}
return null;
}
}
$x = array('a'=>'ddd');
$x = new MyArray($x);
echo $x['A'];
输出:
ddd
答案 2 :(得分:2)
function array_keys_to_lower($array)
{
$lc_array = array();
foreach ($array as $key => $value)
{
$lc_array[strtolower($key)] = $value;
}
return $lc_array;
}
function get_value($array, $index)
{
$lc_array = array_keys_to_lower($array);
return $lc_array[strtolower($index)];
}
答案 3 :(得分:2)
易。
不要这样做。
模糊自己的代码并不是一个好主意 只需遵循语法规则即可。
答案 4 :(得分:1)
你必须为此编写自己的函数,伪代码:
function getElem(index, array){
return array[toLower(index)];
}
答案 5 :(得分:1)
$index = "a";
$index = strtoupper($index);
$ret = $a[$index];
答案 6 :(得分:1)
我想如果不改变你当前的数组使用情况就会是这样的:
$x = array('a'=>'ddd');
echo isset($x['a']) ? $x['a'] : $x['A'];
您可以使用以下功能:
$x = array('a'=>'ddd');
echo getIndex($x, 'a');
// return either the value of $x['a'], $['A'] or null
function getIndex($array, $index) {
return isset($x[strtolower($index)]) ? $x[strtolower($index)] : (isset($x[strtoupper($index)]) ? $x[strtoupper($index)] : null);
}
答案 7 :(得分:1)
这可能有点晚了,但我认为你想要完成的事情可以轻松完成:
$key = 'Key';
$array[$key] = 153;
$array = array_change_key_case($array)
echo $array[strtolower($key)];
答案 8 :(得分:0)
您可以使用array_change_key_case
更改数组的大小写,将所有键转换为小写或大写,让您高枕无忧。
示例:
$headers = getallheaders();
$headers = array_change_key_case($headers, CASE_UPPER);
if (isset($headers['AUTHENTICATION'])) {
// do your thing
}