- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我使用下面的代码来获取两个数组的差异。但现在看来,它删除了太多元素,或者我做错了什么。
我希望输出为 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/
我遇到了 PHP 函数 array_diff 的问题。 在这两种情况下,我都在相同类对象的数组上使用它。 第一种情况: public function findFreeUsers($weekId) {
这可能是一个非常简单的问题,但在尝试解决几个小时后,我认为我的大脑现在正在以非常狭窄和特定的角度寻找解决方案。我什至可能使用了错误的功能!! 我有 2 个数组,我想要两个数组之间的任何可能差异。这适用
这个问题已经有答案了: Compare 2-dimensional data sets based on a specified second level value (9 个回答) 已关闭去年。 我
我有两个数组。其中之一是多维数组,例如 $products = array( 0 => array( 'product_id' => 33,
这个问题在这里已经有了答案: Compare 2-dimensional data sets based on a specified second level value (9 个回答) 关闭去年
我有两个数组。其中之一是多维数组,例如 $products = array( 0 => array( 'product_id' => 33,
我有两个包含重复值的数组: $test1 = Array( "blah1", "blah1", "blah1", "blah1",
有人可以看一下并让我知道我做错了什么吗...我想要实现的是,在数据库中我有: AGENT_REF = 1 AGENT_REF = 2 AGENT_REF = 3 AGENT_REF = 4 AGENT
我正在寻找一些工具来为我提供两个数组的递归差异。我设想的是一个带有两个颜色编码树结构的网页。在每棵树上,绿色是数组中与两个数组都匹配的部分,红色是每个数组中不匹配的部分。类似于 dBug 的输出 我有
我混淆了 array_diff 行为 为什么 diff 数组上不存在流派?你知道如何解决这个问题吗? -代码 '0', 'value02' => 'v2', 'genre' => '
(I'm a beginner) 我的脚本使用标准 $c = 0; $t = count($array); while ($c < $t) { $blah = $array[$c]; ++$c
我目前正在尝试使用 array_diff 从数组中删除 1 个值。 代码现在看起来像这样: $item_id = 501; $array = array_diff($user_items, array
这是一个非常简单的问题,但是 PHP 文档没有解释为什么会这样。 我有这个代码: var_dump($newattributes); var_dump($oldattributes); var_dum
我使用下面的代码来获取两个数组的差异。但现在看来,它删除了太多元素,或者我做错了什么。 我希望输出为 array(333, 111),因为元素 111 在第一个数组中出现两次,而在第二个数组中只出现一
我正在寻找一些工具来为我提供两个数组的递归差异。我设想的是一个带有两个颜色编码树结构的网页。在每棵树上,绿色是数组中与两个数组都匹配的部分,红色是每个数组中不匹配的部分。类似于 dBug 的输出 我有
我有以下两个数组和查找 array_diff 的代码: $obs_ws = array("you", "your", "may", "me", "my", "etc"); $all_ws = arra
array_diff() 是如何工作的?它显然不能像下面这样工作: function array_diff($arraya, $arrayb) { $diffs = array();
旧字段(截止) | exceptions | +---------------+ | ryu,moderator | 新字段(账户) | username | +-----------
Array1 是一个关联数组,包含从 MySQL 中获取的多个列表,而 Array2 是一个数值数组,即一个简单的数组。 Array2有list_ids,用来过滤Array1。 Array1 示例:
我有两个数组,var_dump 为其提供以下值: $array1: Artifacts:array(2) { [0]=> array(3) { [0]=> string(7) "module1"
我是一名优秀的程序员,十分优秀!