我不介意使用该array_key_exists()
功能。事实上,我更喜欢使用这个特定的函数,而不是依赖于可能会在未来改变它们的行为的hack函数,比如empty
和isset
(删除线以避免易感性)。
但是,我确实使用了一个简单的函数,在这方面很方便,以及在处理数组索引的其他一些情况下:
function Value($array, $key, $default = false)
{
if (is_array($array) === true)
{
settype($key, 'array');
foreach ($key as $value)
{
if (array_key_exists($value, $array) === false)
{
return $default;
}
$array = $array[$value];
}
return $array;
}
return $default;
}
假设您有以下数组:
$arr1 = array
(
'xyz' => 'value'
);
$arr2 = array
(
'x' => array
(
'y' => array
(
'z' => 'value',
),
),
);
你如何从数组中获得“价值”?简单的:
Value($arr1, 'xyz', 'returns this if the index does not exist');
Value($arr2, array('x', 'y', 'z'), 'returns this if the index does not exist');
我们已经涵盖了单维和多维数组,我们还能做什么?
以下面这段代码为例:
$url = 'https://stackoverflow.com/questions/1960509';
$domain = parse_url($url);
if (is_array($domain) === true)
{
if (array_key_exists('host', $domain) === true)
{
$domain = $domain['host'];
}
else
{
$domain = 'N/A';
}
}
else
{
$domain = 'N/A';
}
是不是很无聊?这是使用该Value()
函数的另一种方法:
$url = 'https://stackoverflow.com/questions/1960509';
$domain = Value(parse_url($url), 'host', 'N/A');
再举一个例子,拿这个RealIP()
函数做一个测试:
$ip = Value($_SERVER, 'HTTP_CLIENT_IP', Value($_SERVER, 'HTTP_X_FORWARDED_FOR', Value($_SERVER, 'REMOTE_ADDR')));
整齐吧?;)