【问题标题】:Comparing two arrays to find difference using PHP function使用 PHP 函数比较两个数组以找出差异
【发布时间】: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您认为是解决问题的最佳答案。

标签: php php-7


【解决方案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 — 计算数组的差异 额外的索引检查

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多