我不介意使用
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://dev59.com/OnI-5IYBdhLWcg3wO1rl';
$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://dev59.com/OnI-5IYBdhLWcg3wO1rl';
$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')));
很整洁,是吗?;)