我使用下面的代码来区分两个数组。但是现在它似乎删除了太多元素,或者我做错了什么。
我希望输出为array(333, 111)
,因为元素111
在第一个数组中出现两次而在第二个数组中只出现一次。所以1x 111
应该在输出中。但截至目前,111
在输出中完全缺失。
我做错了什么或者我该怎么做才能让这个功能按照我想要的方式工作?
<?php
$Inventory1 = "111,222,333,111";
$SplitInventory1 = explode(",",$Inventory1);
$Invoice = "111,222";
$SplitInvoice = explode(",",$Invoice);
$SplitResult1 = array_diff($SplitInventory1, $SplitInvoice);
echo $JointInventory1 = implode(",",$SplitResult1);
?>
答案 0 :(得分:1)
我已使用array_filter
使用$SplitInventory1
过滤$SplitInvoice
数组的值。如果array_filter's
callback function
返回true
,那么现值将被放入新的array
。
所以stpes将是
1)$var
将携带第一个数组的值,如111,222,333,444
,并使用array_search
它将在$SplitInvoice
数组中检查这些是否存在。
2)array_search
返回找到值的key
,因此当$SplitInvoice
数组中找到111和222时,回调函数将返回false并且这些值将不会放在{{1}中但是在$diff
中搜索333时。这在$SplitInvoice
中找不到,回调函数将返回true,它将被放置在$SplitInvoice
。
3)我有$diff
unset
数组的另一件事如果找到一个值,那么我们需要一个dublicate条目(如果没有取消设置$ SplitInvoice则为111,那么它将不会进入{{1} })
$SplitInvoice
输出
$diff