使用 PHP 函数比较两个数组以找出差异

Posted

技术标签:

【中文标题】使用 PHP 函数比较两个数组以找出差异【英文标题】:Comparing two arrays to find difference using PHP function 【发布时间】:2018-10-31 17:00:16 【问题描述】:

在 magento2 中使用 php,我需要比较两个数组。 $Session 数组大小将大于 $post 数组大小。所以我需要将我的 $post 值与 $session 值进行比较。如果两个数组的所有键值相同,则应返回空数组。

$session = [
    "domains" => 'x',
    "domain" => '',
    "searchfilter" => 'AD DOmain',
    "searchterm" => ''
];
$post = [
    "domains" => 'xx',
    "domain" => 'AD DOmain',
    "searchfilter" => ''
];
$result = $this->formArray($post, $session) ;

我的预期结果:

Array()

  "domains" => 'xx',
  "domain" => 'AD DOmain',
  "searchfilter" => ''

我的实际结果:

Array()


我尝试过类似的东西,

public function formArray($post, $session)
        $checkNewValue = array_diff($post, $session);
        $checkNewKey = array_diff_key($post, $session);
        $mergedArray = array_merge($checkNewValue, $checkNewKey);
        return $mergedArray;

我不知道缺少什么。请帮忙!谢谢

【问题讨论】:

如果问题解决了,请accept您认为是解决问题的最佳答案。 【参考方案1】:

来自这个问题:PHP - Merging two arrays into one array (also Remove Duplicates)

$session = [
    "domains" => 'x',
    "domain" => '',
    "searchfilter" => 'AD DOmain',
    "searchterm" => ''
];
$post = [
    "domains" => 'xx',
    "domain" => 'AD DOmain',
    "searchfilter" => ''
];
//This will return true if both `$session` and `$post` has the same key/value pair. 

http://www.php.net/manual/en/language.operators.array.php

`$a == $b   Equality    TRUE if $a and $b have the same key/value pairs.`

if($session == $post)
     $new_arr = array();
else
     $new_arr = array_unique(array_merge($session,$post), SORT_REGULAR);    


echo '<pre>';
print_r($new_arr);

结果:

//if array are not equal

Array
(
    [domains] => xx
    [domain] => AD DOmain
    [searchfilter] => 
)

  //else
   Array()

【讨论】:

如果 $post 数组类似于 $session 数组会怎样。它应该为我返回一个空数组。但它返回 $session 数组 @KNandy 请在您的问题中说明。另外,定义相似?值相同吗?另外,请在您的问题中写下。 @KNandy 只是为了澄清他们是否具有相同的键/值对?因为您的 $session 有 4 个键/值对,而 $post 有 3 个。【参考方案2】:

尝试使用array_diff_assoc。

<?php
$session = [
    "domains" => 'x',
    "domain" => '',
    "searchfilter" => 'AD DOmain',
    "searchterm" => ''
];
$post = [
    "domains" => 'xx',
    "domain" => 'AD DOmain',
    "searchfilter" => ''
];

$checkNewValue = array_diff_assoc($post, $session);
var_dump($checkNewValue);

?>

【讨论】:

【参考方案3】:

array_diff_assoc可以在这里使用。

array_diff_assoc — 计算数组的差异 额外的索引检查

【讨论】:

以上是关于使用 PHP 函数比较两个数组以找出差异的主要内容,如果未能解决你的问题,请参考以下文章

pyspark 数据框比较以根据关键字段查找列差异

比较两个文本并找出差异

FCC 中级算法题 比较两个数组

比较两个 NSDictionaries 并找出差异

用 php 和 mongo 处理巨大的数组

两个STRING数组进行比较