我有两个数组要比较,我不知道该怎么做。这是我的代码:
$configStructure =
array('name'=>'Example','description'=>'Example','user'=>'Blabla');
这个数组(上面)是其他配置的结构或模式数组。
$config =
array('name'=>'Application name','desc'=>'My description of app','user'=>'Alex');
我想创建一个比较这些数组的函数。
function checkStructure($configStructure, $config){
//the function, here will return false because the $config don't have the same structure of $configStructure(description is replace by desc)
}
对不起,如果我的问题语法不正确,我的英语不是很好。感谢您的帮助:)
这是另一个仅检查所需键的解决方案:
$configStructure=array('name'=>'Example','description'=>'Example','user'=>'Blabla');
$config=array('name'=>'Application name','desc'=>'My description of app','user'=>'Alex');
function check($struct,$arr){
foreach ($struct as $k => $v) if (!array_key_exists ($k,$arr)) return 0;
return 1;
}
echo check($configStructure,$config);
// 0: the required keys ar **not** all there
// 1: all required keys are set
-
使用
array_keys()
— 返回数组的所有键或键的子集 -
array_diff()
— 计算数组的差值
function checkStructure($configStructure, $config) {
if (array_diff(array_keys($configStructure), array_keys($config))) {
return false;
}
return true;
}
$configStructure = array('name' => 'Example', 'description' => 'Example', 'user' => 'Blabla');
$config = array('name' => 'Application name', 'desc' => 'My description of app', 'user' => 'Alex');
var_dump(checkStructure($configStructure, $config));
会返回bool(false)
.
而将'desc'
更改为'description'
将返回bool(true)
.
请尝试此功能。
function checkStructure($configStructure, $config) {
$arr_key1 = array_keys($configStructure);
$arr_key2 = array_keys(config);
if(count($arr_key1) != count($arr_key2)){
return false;
}
foreach($arr_key1 as $val){
if(!in_array($val,$arr_key2))
return false;
}
return true;
}