Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 数组_diff()删除的元素太多_Php_Arrays - Fatal编程技术网

Php 数组_diff()删除的元素太多

Php 数组_diff()删除的元素太多,php,arrays,Php,Arrays,我使用下面的代码从两个数组中获得差异。但现在看来,它删除了太多的元素,或者我做错了什么 我希望输出是array(333111),因为元素111在第一个数组中出现两次,在第二个数组中只出现一次。因此1x111应该在输出中。但是到目前为止,111在输出中完全缺失 我是否做错了什么,或者我应该怎么做才能让这个函数正常工作 <?php $Inventory1 = "111,222,333,111"; $SplitInventory1 = explode(",",$Inventor

我使用下面的代码从两个数组中获得差异。但现在看来,它删除了太多的元素,或者我做错了什么

我希望输出是
array(333111)
,因为元素
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);

?>

您好,我使用
数组\u过滤器
使用
$SplitInvoice
过滤
$SplitInventory1
数组的值。如果
array\u过滤器的
回调函数
返回
true
,则当前值将放入新的
数组

因此,STPE将

1)
$var
将携带第一个数组的值,如
11122233444
并使用
array\u search
检查这些值是否存在于
$SplitInvoice
数组中

2)
array\u search
返回找到的值的
,因此当在
$SplitInvoice
数组中找到111和222时,回调函数将返回false,并且这些值不会放在
$diff
中,而是当在
$SplitInvoice
中搜索333时。这在
$SplitInvoice
中找不到,回调函数将返回true,并将其放置在
$diff

3) 还有一件事我有
unset
$SplitInvoice
数组,如果因为我们需要重复条目而找到了一个值(由于111,如果$SplitInvoice没有unset,那么它将不会进入
$diff


虽然这个代码片段可以解决这个问题,但它确实有助于提高文章的质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。还请尽量不要用解释性注释挤满你的代码,这会降低代码和解释的可读性!我真的需要对这些代码进行解释,但我需要知道它是如何工作的:(@ShermaineChaingan总是要求解释代码。这一方面会提高答案的长期质量,另一方面,理解代码会让你更容易修改代码并从中学习。我无法应用代码,因为我不知道它对所有其他人的实际工作情况,因为它也是一个学习网站每个人都在谷歌上搜索新知识。耐心是成功的关键。如果我通过从任何地方复制或搜索来回答任何问题,我也是一个新的学习者。我认为我会学到一些新的东西。我没有强迫任何人对此进行投票或接受此
array\u diff()
(类似功能也一样)不要考虑相同元素的数量。因此,如果数组中现在有1x
111
或10x
111
并不重要,它只会在输出中有一次,或者没有。因此,对于您想要的内容,您需要编写您自己的函数,使用一些简单的foreach循环,从一个数组中取消设置另一个数组中的每个元素。“
array_diff
返回数组1中不存在于任何其他数组中的值”–
111
存在于其他数组中,为什么要返回它?
<?php
    $Inventory1 = "111,222,333,111";
    $SplitInventory1 = explode(",",$Inventory1);
    $Invoice = "111,222";
    $SplitInvoice = explode(",",$Invoice);
    $diff = array_filter($SplitInventory1, 
  function ($val) use (&$SplitInvoice) { 
    $key = array_search($val,$SplitInvoice);
    if ( $key === false ) return true;
    unset($SplitInvoice[$key]);
    return false;
  }
);

echo "<pre>";print_r($diff);

?>
Array
(
    [2] => 333
    [3] => 111
)