我有两个数组:
- $valid_sku_array
- $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";
这就是你想做的吗?