我有两个数组,我想比较它们的结构,即相同的键。
我尝试使用array_diff_key
,但问题是一个数组定义如下:
$fields = array('id' , 'site', 'placement', 'device', 'source', 'campaign', 'url', 'country', 'dof_count', 'dof_idx', 'active');
所以当我使用var_dump()
时,我得到了这个结果:
{
[0]=>
string(2) "id"
[1]=>
string(4) "site"
[2]=>
string(9) "placement"
[3]=>
string(6) "device"
[4]=>
string(6) "source"
[5]=>
string(8) "campaign"
[6]=>
string(3) "url"
[7]=>
string(7) "country"
[8]=>
string(9) "dof_count"
[9]=>
string(7) "dof_idx"
[10]=>
string(6) "active"
}
而另一个是由函数创建的,并且像这样返回:
{
["id"]=>
NULL
["site"]=>
NULL
["placement"]=>
NULL
["device"]=>
NULL
["source"]=>
NULL
["campaign"]=>
NULL
["url"]=>
NULL
["country"]=>
NULL
["dof_count"]=>
int(0)
["dof_idx"]=>
NULL
["active"]=>
NULL
}
所以虽然两个阵列具有相同的结构,但array_diff_key
不会有帮助。在php中有没有办法比较这两个数组的结构而忽略了内容,在我的例子中它是所有的null和第二个数组中的一个int?
答案 0 :(得分:2)
您只需将array_diff
与array_keys
一起使用
$result = array_diff($fields,array_keys($keys_array));
注意:未经测试
答案 1 :(得分:1)
我看到了其他答案,而且我知道他们是正确的。这些功能将能够帮助你。
但是我无法理解为什么你会这样创建你的数组:
$fields = array('id' , 'site', 'placement', 'device', 'source', 'campaign', 'url', 'country', 'dof_count', 'dof_idx', 'active');
如果你的目标只是简单地验证另一个数组,那么只需关联创建它:
<?php
$fields = array(
'id' => null,
'site' => null,
'placement' => null,
/*...*/
'active' => null
);
但是,我不明白你需要验证数组结构,因为它应该总是相同的。如果你有多个输入类型的数组,那么你应该在你要返回的所有数组上创建一个名为type的字段,并从那里“if”它们。 例如:
<?php
/*This array has a type and only two indexes of data.*/
$inputArray = array(
'type' => 'firstType',
'data1' => 'data',
'data2' => 'data'
);
/*This array also has a type but 6 indexes containing datas*/
$anotherInputArray = array(
'type' => 'secondType',
'data3' => 'data',
'data4' => 'data',
'data4' => 'data',
'data4' => 'data',
'data4' => 'data',
'data4' => 'data'
);
treatArray($inputArray);
treatArray($anotherInputArray);
function treatArray($array){
if($array['type']=='firstType'){
/*Treat it in one way*/
}elseif($array['type']=='secondType'){
/*Or the other way*/
}
}
我希望我能提供帮助,但你没有描述你正在使用的背景,所以我尽力猜测周围(即使不推荐)。
答案 2 :(得分:0)
只需array_flip
您的$field
数组:
var_dump(array_diff_key(array_flip($fields), $array2));