【问题标题】:Return keys of array only if not found in array A仅当在数组 A 中找不到时才返回数组的键
【发布时间】:2017-10-13 19:51:28
【问题描述】:

我有两个数组,一个是自定义的。

$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 数组中,那也没关系。

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

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

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

【问题讨论】:

  • 如果只关心按键,则需要array_diff_key()
  • 如果 $headers 数组中的键与 $fields 数组中的任何键都不匹配,我想返回一个错误。 但是 phonelast_name两者都在,所以你需要更好地解释标准。
  • @AbraCadaver 如果 $headers 数组中有一个键与 $fields 数组中的任何键都不匹配,我想返回一个错误。我更新了问题,所以它更清楚
  • 这是我的想法,所以答案实现了。

标签: php arrays validation


【解决方案1】:

两件事:

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

  2. 更改参数的顺序。 diff 函数返回后续参数中不存在的第一个参数的值,因此如果$fields 有一些不在$headers 中的键无关紧要,您可以输入$headers首先。

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

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

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

【讨论】:

  • 啊,我明白了。不是真的,但有一个正确的想法,即有一个现有的功能可以处理它。
  • 我过头了 :-(
  • 例如,如果 $fields 中的键有一个键怎么办。 $headers 将具有“ship_state”,而 $fields 将具有“state” 我是否使用带有 if 语句的循环卡住了?我不希望该实例返回错误或差异。
  • 是的,我认为您无法使用内置函数进行检查。
【解决方案2】:

检查相交键的计数并与$headers的计数进行比较:

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

所以这是返回 $header 中存在于 $fields 中的所有键并比较计数,这应该是相同的。

【讨论】:

    猜你喜欢
    • 2023-01-09
    • 1970-01-01
    • 2013-12-27
    • 2016-08-28
    • 2018-01-15
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多