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');
すでに1次元および多次元の配列がカバーされていますが、他に何ができるでしょうか?
たとえば、次のコードを見てください。
$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')));
きちんとね?;)