如何找出两个数组的差异


How to find out the differences of 2 arrays?

我有两个数组:

  1. $valid_sku_array
  2. $qb_skuarray

我想intersect它们,并打印出bad一个(差异)

然后我这样做:

        // Case Sensitive
        $intersect_sku_array_s = array_intersect( $valid_sku_array, $qb_sku_array );
       dd($intersect_sku_array_s); ... array (size=17238) 

然后我也尝试了使用案例不敏感的做法:

    // Case Insensitive
    $intersect_sku_array_is = array_intersect(array_map('strtolower', $valid_sku_array), array_map('strtolower', $qb_sku_array ));
    dd($intersect_sku_array_is); ... array (size=18795)  

正如您所看到的,两个数组的diff=18795-17238=1557。我想看看它们是什么。然后我尝试了这个:

$diff = array_diff( $intersect_sku_array_is , $intersect_sku_array_s );

dd($diff);什么时候我得到了array (size=18795)

我只是不知道如何打印出那些1557

有人能解释一下这里发生了什么吗?

您的问题已经从您的intersect调用开始了!在那里,您将丢失"真实"数组数据,因为您用小写字母比较所有内容,并用小写字母分配。

所以你的array_diff找不到任何东西,因为它是区分大小写的,如果你不区分大小写,你仍然没有真正的数据。

你已经不得不改变你的交集了。所以你的代码应该是这样的:

$intersect_sku_array_s = array_intersect($valid_sku_array, $qb_sku_array);
$intersect_sku_array_is = array_uintersect($valid_sku_array, $qb_sku_array, "strcasecmp");
                        //^^^^^^^^^^^^^^^^ See here I used 'array_uintersect' with 'strcasecmp', so that you don't lose your case

在这之后,你可以这样做你的array_diff正常:

$diff = array_diff($intersect_sku_array_is, $intersect_sku_array_s);

我不熟悉dd作为PHP函数。

你的问题还不完全清楚,但如果你只是想看看数组$diff的内容,有很多方法可以做到…

echo "diff=<pre>".print_r($diff,true)."</pre><br />'n";

-或-

var_dump($diff);

-或-

foreach ($diff as $k=>$v)
    echo "k=$k, v=$v<br />'n";

这就是你想做的吗?