我有一个数组包含一些基本上像这样的设置:
$defaults = array( 'variable' => 'value', 'thearray' => array( 'foo' => 'bar' 'myvar' => array('morevars' => 'morevalues'); ); );
在另一个文件中,我得到一个带有第一级密钥的字符串,并且它的子项用于检查是否附加了一个值。使用上面的数组,我会得到这样的结果:
$option = "thearray['myvar']['morevars']";
我需要保持这个字符串的格式与上面类似,因为我还需要将它传递给另一个保存到数据库的函数,并以数组的格式使用它。
我的问题是,有了上面的数组和字符串,我如何检查数组中给定键的存在和值? array_key_exists似乎不能在第一级以下工作。
答案 0 :(得分:1)
您可以使用一个简单的函数来解析您的键字符串并检查数组:
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值。
答案 1 :(得分:-1)