比较php数组的结构,无论内容如何

时间:2015-07-22 12:45:49

标签: php arrays

我有两个数组,我想比较它们的结构,即相同的键。 我尝试使用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?

3 个答案:

答案 0 :(得分:2)

您只需将array_diffarray_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));