我在PHP中有两个数组,如下所示:
- 人们 *
Array
(
[0] => 3
[1] => 20
)
- 通缉犯 *
Array
(
[0] => 2
[1] => 4
[2] => 8
[3] => 11
[4] => 12
[5] => 13
[6] => 14
[7] => 15
[8] => 16
[9] => 17
[10] => 18
[11] => 19
[12] => 20
)
如何检查 People 元素中是否有任何元素在 Wanted Criminals 数组中?
在本例中,它应该返回true
,因为20
在 Wanted Criminals 中。
8条答案
按热度按时间jm81lzqq1#
您可以使用
array_intersect()
。oewdyzsn2#
使用array_intersect()和count()(而不是空的)没有什么问题。
例如:
wnrlj8wa3#
如果“空”不是最好的选择,那么这个怎么样:
或
vc9ivgsu4#
该代码无效,因为只能将变量传递到语言构造中。
empty()
是语言构造。您必须在两行中执行此操作:
slsn1g295#
in_array与array_intersect的性能测试:
以下是结果:
in_array至少快了5倍。注意,我们一找到结果就“中断”。
uwopmtnx6#
也可以按如下方式使用in_array:
虽然array_intersect使用起来确实更方便,但事实证明它在性能方面并不真正上级。我也创建了这个脚本:
然后,我分别在以下位置运行两个片段:http://3v4l.org/WGhO7/perf#tabs和http://3v4l.org/g1Hnu/perf#tabs,并检查了每一个的性能。有趣的是,总的CPU时间,即用户时间+系统时间是相同的PHP5.6和内存也是相同的。在PHP5.4下,总的CPU时间是较少的in_array比数组_intersect,虽然边际如此。
yptwkmov7#
下面是我研究了一段时间后的一种方法。我想做一个Laravel API端点来检查字段是否“正在使用”,所以重要的信息是:1)哪个数据库表?2)哪个数据库列?3)该列中是否有与搜索项匹配的值?
知道了这一点,我们就可以构造关联数组了:
然后,我们可以设置要检查的值:
然后,我们可以使用
array_key_exists()
和in_array()
来执行一步、两步组合,然后根据truthy
条件进行操作:对于Laravel特有的PHP代码,我表示歉意,但是我将不去管它,因为我认为您可以将它作为伪代码来阅读。重要的部分是同步执行的两个
if
语句。array_key_exists()
和in_array()
是PHP函数。资料来源:
我在上面展示的算法的优点在于,您可以创建一个REST端点,例如
GET /in-use/{table}/{column}/{value}
(其中table
、column
和value
是变量)。您可以:
然后您可以发出GET请求,例如:
GET /in-use/accounts/account_name/Bob's Drywall
(您可能需要对最后一部分进行URI编码,但通常不需要)x1米11米1x
GET /in-use/users/email/alice@bob.com
还请注意,没有人可以:
GET /in-use/users/password/dogmeat1337
,因为password
未列在user
的允许列列表中。祝你旅途顺利。
ukqbszuj8#
我已经创建了一个干净的帮助函数供您使用。
你会用这个