我有两个阵列,一个是自定义的。
$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);
答案 0 :(得分:3)
两件事:
如果您想检查$headers
中是否存在来自$fields
的所有密钥,请使用array_diff_key
代替array_diff
。 array_diff
只会比较值。
更改参数的顺序。 diff函数返回后续参数中不存在的第一个参数的值,因此如果$fields
有一些不在$headers
中的键并不重要,那么你想要先放$headers
。
所以我认为你需要的代码是:
$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
中存在的所有密钥,并比较计数,这应该是相同的。