gpt4 book ai didi

php - array_diff() 删除了太多元素

转载 作者:搜寻专家 更新时间:2023-10-31 21:24:41 24 4
gpt4 key购买 nike

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

我希望输出为 array(333, 111),因为元素 111 在第一个数组中出现两次,而在第二个数组中只出现一次。所以 1x111 应该在输出中。但截至目前,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);

?>

最佳答案

您好,我已经使用 array_filter 通过 $SplitInvoice 过滤 $SplitInventory1 数组的值。如果 array_filter 的 回调函数 返回true,则当前值将被放入新的array

所以 stpes 会是

1) $var 将携带第一个数组的值,如 111,222,333,444 并使用 array_search 它将检查这些值是否存在于 $SplitInvoice数组。

2)array_search 返回找到的值的 key 所以当在 $SplitInvoice 数组中找到 111 和 222 时回调函数将返回 false 并且这些值不会放在 $diff 中,但是当在 $SplitInvoice 中搜索 333 时。这不会在 $SplitInvoice 中找到,回调函数将返回 true,它将被放置在 $diff 中。

3) 还有一件事我有 unset $SplitInvoice 数组如果找到一个值因为我们需要重复条目(由于 111 如果 $SplitInvoice 没有被取消设置那么它将不进来 $diff )

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

关于php - array_diff() 删除了太多元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38896220/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com