问题标签 [array-difference]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
5713 浏览

php - PHP - 如何以动态方式比较数组的值?

好的,我有以下“挑战”;

我有这样的数组:

我需要做的是检查它们是否都具有相同的[状态]。问题是,我可以在里面有 2 个或更多(动态)数组。

我如何循环/搜索它们?

array_diff 确实支持多个数组进行比较,但是怎么做呢?:( 我尝试过哪个循环,或者我的 Apache / 浏览器死了 - 或者我得到了完全虚假的数据。

0 投票
1 回答
171 浏览

php - array_diff 不输出它应该在 PHP 中的内容

我对array_diff 有疑问。

我有一个带有合法电子邮件地址的文本区域。我从 mysql-database 得到这些。当我将它们插入文本区域时,我还将它们保存在一个数组中。

提交表单时,我有一个函数获取 textarea 的内容并将其与第一个数组进行比较。通过这种方式,我可以查看用户是否添加了另一个电子邮件地址。

我的问题是 array_diff 输出整个数组,而不是不同的元素。

我试图在比较它们之前输出数组,它们都有正确的值。当我尝试使用具有硬编码值的虚拟数组时,输出是正确的。

什么会导致这种情况?

0 投票
1 回答
1261 浏览

php - 将两个 PHP mysql_fetch_assoc 集合的 MySQL 多维数组合并为一个单维数组

非常感谢您对此的任何帮助。

我正在运行 two以从一个表 ( ) 中检索数据库中指定用户的总公告mysql_query数组( ) 并从第二个表 ( ) 中检索已签名公告bulletinsbulletins_sign_log

我遇到的问题是如何从两个数组中确定哪些公告仍然需要用户签名。

这是示例数组和我到目前为止的尝试:

总公告 mysql_queryPHP 代码

总公告 print_r结果

签名公告 mysql_queryPHP 代码

签名公告 print_r结果

这就是我无法弄清楚如何确定总公告中的第 3条公告没有被用户签名的地方。我试过使用但没有得到预期的结果。array_diff()

比较 array_diffPHP代码

比较 print_r结果

我的最终目标是获取 unsigned 的值bulletin_id(在这种情况下为公告 #3),如果大于 0,则将其放入标头重定向中,例如:

最后结果

header('location: /sign_bulletin.php?bulletin_id=1');

最终(预期)结果

header('location: /sign_bulletin.php?bulletin_id=3');


编辑在尝试@gilden 建议的 SQL 查询后添加一些附加信息。

我在 phpMyAdmin 中使用的SQL 查询

来自 phpMyAdmin 的MySQL 结果

结果的问题是它列出了bulletin_id #1没有为username1签名。但是,在下面的示例bulletins_sign_log表中,username1具有此 bulletin_id 的“已签名”记录。由于匹配的 SQL 语句,它被标记:

to_group_id没有记录在bulletins_sign_log表中,因为“组”不能为某事签名,但它的成员可以。它只记录在bulletins表中以知道哪些用户也发送公告。在这种情况下,to_group_id '0'是所有用户都会收到公告的“Everyone”组。

所以我的下一个想法是删除OR b.to_group_id = '0',但后来我得到了一个空集。关于当前数据库配置从这里去哪里的任何想法?更改数据库将意味着不幸地更改大量代码,然后可能需要数小时或数天的调试时间。

是否有可能回到单独数组的原始想法,并以某种方式将它们都放入一个可以删除重复值的数组中?原始方法似乎是一种获取准确源信息的工作方法,这是一个开始。然后,这将留下一组未签名的唯一 bulletin_id。

结构bulletins

结构bulletins_sign_log

提前感谢您提供的任何帮助!


@gilden的帮助下的最终代码- 谢谢!

原始发件人必须在自己的公告上签名是没有意义的,所以我通过添加以下内容来阻止它作为 SQL 查询的要求:

警告请务必将其添加到查询的底部,否则它将不起作用 - 相信我。

...这是最终的 SQL 查询:

...和​​PHP 代码

0 投票
3 回答
3671 浏览

arrays - 数组和已知子序列差异的有效算法?

我将一个数组传递给一个库函数,该函数返回一个数组,该数组是输入数组的子序列。也就是说,第一个数组和第二个数组的顺序相同,但第二个数组可能缺少第一个数组的任意数量的元素。两个数组中都不会有重复项!

然后,我想为输入中但不在函数输出中的所有元素构建一个新数组。

出于某种原因,虽然这听起来微不足道,但我一直弄错了,尤其是在数组的末端。

示例 1(典型):

输入数组 a:

输入数组 b:

输出数组“差异”:

示例 2(最小,当差异位于字符串末尾时会显示一些错误):

输入数组 a:

输入数组 b:

输出数组“差异”:

(我将在 JavaScript / jQuery 中实现它,但我对伪代码中的通用算法更感兴趣,因为我实际上将处理对象数组。所以请我寻找专门使用数组索引的算法而不是比我在 C/C++ 中的指针)

0 投票
3 回答
1026 浏览

php - array_udiff_assoc() 和 array_diff_uassoc() 有什么区别?

array_udiff_assoc()和 和有什么不一样array_diff_uassoc()

对于array_udiff_assoc(),我有这个代码:

结果

还有array_diff_uassoc()

结果与第一个相同:

如果它们有任何区别,那是什么?PHP 手册没有说它们是彼此的别名。

0 投票
2 回答
1760 浏览

php - array_diff_assoc() 的 PHP 逆,删除重复值

我有权限级别系统,所以我需要从我的数组中删除我之前选择的权限。例如:

问题:(array_diff_assoc)比较确切的键,[0] = [0],我需要比较值而不是键,并返回所有权限,而不是我的 previos 选择的权限,而不是删除的值。

我的数组和返回

0 投票
3 回答
341 浏览

php - array_diff_uassoc 的行为不清楚

首先,我需要提到的是,我深入研究了手册和 php 文档,但没有找到答案。这是我使用的代码:

我的想法是,array_diff_uassoc 将比较这两个数组的所有值,如果值存在,则运行键比较。这段代码的输出是:

那么首先为什么有些对(1:0或3:1)是重复的?这是否意味着函数忘记了它已经比较了这些项目?我认为它会比较所有相等的值对,但我没有在输出中看到它。我错过了什么吗?

所以问题是:这个函数在比较顺序方面的确切行为是什么,为什么我看到这个重复?(我的 PHP 版本,如果有帮助的话:PHP 版本 5.3.6-13ubuntu3.6)

我真的很困惑,等待一些好的解释......

0 投票
2 回答
195 浏览

php - 复杂 xml 的 array_diff

我有这个包含四个文本消息的 xml,并且我已将其转换为一个数组。

xml

数组

Array ( [smses] => Array ( [sms] => Array ( [0] => Array ( ) [1] => Array ( ) [0_attr] => Array ( [protocol] => 0 [address] => 0800000 [date] => 1328814938421 [type] => 2 [subject] => null [body] => 它下雨的猫狗;以及它们的主人。 [toa] => null [sc_toa] => null [service_center] = > null [read] => 1 [status] => -1 [locked] => 0 [date_sent] => null [readable_date] => 2012 年 2 月 9 日晚上 10:15:38 [contact_name] => Hans Petit) [1_attr] => Array ( [protocol] => 0 [address] => 08005678 [date] => 1328814938421 [type] => 2 [subject] => null [body] => 你好,Andy。附件是' t 已发送。请重新发送。[toa] => null [sc_toa] => null [service_center] => null [read] => 1 [status] => -1 [locked] => 0 [date_sent] =>null [可读日期] => 2012 年 2 月 9 日晚上 10:15:38 [contact_name] => Mary The Great ) [2] => Array ( ) [2_attr] => Array ( [protocol] => 0 [address] = > 080091011 [日期] => 1328814938421 [类型] => 2 [主题] => null [正文] => Lorem Ipsum = 晚安。[toa] => null [sc_toa] => null [service_center] => null [阅读] => 1 [状态] => -1 [锁定] => 0 [日期发送] => 空 [可读日期] => 2012 年 2 月 9 日晚上 10:15:38 [联系人姓名] => Ed Myers) [3] => Array ( ) [3_attr] => Array ( [protocol] => 0 [address] => +44839202 [date] => 1328815215841 [type] => 1 [subject] => null [body] => 我代表一个变量。[toa] => null [sc_toa] => null [service_center] => +4422500000 [read] => 1 [status] => -1 [locked] => 0 [date_sent] =>null [可读日期] => 2012 年 2 月 9 日晚上 10:20:15 [contact_name] => Dexter ) [4] => Array ( ) [4_attr] => Array ( [protocol] => 0 [address] => + 2273839309 [date] => 1329194575094 [type] => 1 [subject] => null [body] => Take it easi [toa] => null [sc_toa] => null [service_center] => +4422500000 [read] = > 1 [status] => -1 [locked] => 0 [date_sent] => null [readable_date] => 2012 年 2 月 14 日上午 7:42:55 [contact_name] => Miguel ) ) ) [smses_attr] =>数组 ( [count] => 4 ) )+4422500000 [read] => 1 [status] => -1 [locked] => 0 [date_sent] => null [readable_date] => 2012 年 2 月 14 日上午 7:42:55 [contact_name] => Miguel ) ) [smses_attr] => 数组 ([count] => 4))+4422500000 [read] => 1 [status] => -1 [locked] => 0 [date_sent] => null [readable_date] => 2012 年 2 月 14 日上午 7:42:55 [contact_name] => Miguel ) ) [smses_attr] => 数组 ([count] => 4))

我有另一个xml doc 2,我只更改了一个值-第一个值是address="0800000",第二个是address="0900000"。当我使用比较两个数组时

我明白了,这不是我所期待的。

大批 ( )

我期待类似的东西

0 投票
3 回答
1408 浏览

php - 在比较两个二维数组之间的关联行时,array_diff_assoc() 给出了错误的差异

我有两个数组,我使用array_diff_assoc() php函数来获取差异,但它总是返回通信集作​​为差异,但它应该是新的 q 集这是什么问题,请帮忙

数组——

使用 array_diff_assoc() 操作后

0 投票
2 回答
580 浏览

php - array_diff() 留下空数组键

也许我在这里遗漏了一些东西,但array_diff()似乎在数组的末尾让我空了 kesys。

有了这个示例数据 -

我只剩下这个-

据我了解,这是不正确的(应该取消设置 [0],只留下 [1])。我正在使用$term_ids = array_values($term_ids);after 使密钥正确,但似乎这不是必需的,所以我想知道是否有比我了解更多的人可以澄清一下?