仅在数组A

时间:2017-10-13 19:51:28

标签: php arrays validation

我有两个阵列,一个是自定义的。

$fields = array( "first_name" => "test", "last_name" => "Test", "phone" =>"111-111-1111, "id" => 1234");

另一个是从csv文件的第一行抓取的。这将返回一个像这样的数组

$headers = array ("fname" => "test", "last_name" => "Test", "phone"=> "123-123-1234");

如果$ headers数组中的某个键与$ fields数组中的任何键都不匹配,那么我想返回一个错误。如果$ fields数组中的键不在$ headers数组中,则可以。

例如,上面的两个数组应该返回一个错误,因为$ fields数组中不存在键fname,但因为$ headers数组中缺少id。

我尝试用多个循环试验if语句,但我正在寻找一种更好的方法,我认为我可以操作array_diff方法,但没有运气。

$dif_keys = array_diff($fields, $headers);

2 个答案:

答案 0 :(得分:3)

两件事:

  1. 如果您想检查$headers中是否存在来自$fields的所有密钥,请使用array_diff_key代替array_diffarray_diff只会比较值。

  2. 更改参数的顺序。 diff函数返回后续参数中不存在的第一个参数的值,因此如果$fields有一些不在$headers中的键并不重要,那么你想要先放$headers

  3. 所以我认为你需要的代码是:

    $diff = array_diff_key($headers, $fields);
    

    您可以将$diff评估为布尔值。 (例如if ($diff) {...)如果为空,则评估为false,这意味着$headers中的所有键都在$fields中具有相应的键。

答案 1 :(得分:2)

检查交叉键的数量,并与$headers的数量进行比较:

if(count(array_intersect_key($headers, $fields)) == count($headers)) {
    echo 'Good';
} else {
    echo 'Bad';
}

因此,这将返回$header$fields中存在的所有密钥,并比较计数,这应该是相同的。