我有一个数组,其中包含一些设置,基本上如下所示:
$defaults = array(
'variable' => 'value',
'thearray' => array(
'foo' => 'bar'
'myvar' => array('morevars' => 'morevalues');
);
);
在另一个文件上,我得到一个带有第一级键的字符串,它是子文件,用于检查是否附加了值。使用上面的数组,我会得到这样的结果:
$option = "thearray['myvar']['morevars']";
我需要将该字符串保持与上面类似的格式,因为我还需要将其传递给另一个保存到数据库的函数,并且将其采用数组格式会很方便。
我的问题是,有了上面的数组和字符串,我如何检查数组内给定键的存在性和值? array_key_exists 似乎在第一级以下不起作用。
您可以使用一个简单的函数来解析您的密钥字符串并检查数组,如下所示:
function array_deep_exists($array, $key)
{
$keys = preg_split("/'\\]|\\['/", $key, NULL, PREG_SPLIT_NO_EMPTY);
foreach ($keys as $key)
{
if ( ! array_key_exists($key, $array))
{
return false;
}
$array = $array[$key];
}
return true;
}
// Example usage
$defaults = array(
'variable' => 'value',
'thearray' => array(
'foo' => 'bar',
'myvar' => array('morevars' => 'morevalues')
)
);
$option = "thearray['myvar']['morevars']";
$exists = array_deep_exists($defaults, $option);
var_dump($exists); // bool(true)
最后,获取值(如果存在)返回$array
上面的返回值true
.
请注意,如果您的数组可能包含false
,那么在返回值时,您必须小心区分 no-matching-value 和成功的 false 值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)