如何找出2个数组的差异?

时间:2015-02-25 19:55:38

标签: php arrays laravel

我有2个阵列:

  1. $ valid_sku_array
  2. $ qb_sku_array
  3. 我想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:

        // 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)  
    

    正如你可以看到array = 18795 - 17238 = 1557的diff。 我想知道他们是什么。然后我尝试了这个:

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

    以及dd($diff);何时获得array (size=18795)

    我无法弄明白如何打印 1557

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

2 个答案:

答案 0 :(得分:1)

你的问题已经从你的交叉呼叫开始了!那里你将失去你的真实"数组数据,因为您以小写形式比较所有内容并以小写形式分配它。

因此,您的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);

答案 1 :(得分:-1)

我不熟悉dd作为PHP函数。

您的问题并不完全清楚,但如果您只是想查看数组$diff的内容,有很多方法可以做到这一点......

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

-OR -

var_dump($diff);

-OR -

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

这是你想要做的吗?