比较数组结构


Comparing arrays structure

我有两个数组要比较,我不知道该怎么做。这是我的代码:

$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;
}