array_diff()删除了太多元素

时间:2016-08-11 12:19:18

标签: php arrays

我使用下面的代码来区分两个数组。但是现在它似乎删除了太多元素,或者我做错了什么。

我希望输出为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);

?>

1 个答案:

答案 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