我不介意使用该array_key_exists()
功能。其实,我更喜欢使用这个特定的功能,而不是依靠黑客可能会改变他们的行为在未来的功能像empty
和isset
(strikedthrough为了避免敏感性)。
但是,我确实使用了一个简单的函数,在处理数组索引时以及其他一些情况下,它很方便:
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');
我们已经覆盖了uni和多维数组,我们还可以做什么?
以下面的代码为例:
$url = '/programming/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 = '/programming/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')));
整洁吧?;)