<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 这部分内容和文章无关,仅用于展示分隔</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"文章开始如下..."</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
<hr>
</span><span><span class="hljs-comment"># 如何用array_intersect函数判断两个数组是否存在交集?代码示例和思路详解</span></span><span>
在 PHP 的日常开发中,我们经常会遇到这样的需求:判断两个数组中是否存在相同的元素。比如在权限控制、标签匹配、关键词过滤等场景下,都需要快速得出两个数组是否有交集。此时,`array_intersect` 函数就是一个非常好用的工具。
</span><span><span class="hljs-comment">## 一、array_intersect 函数简介</span></span><span>
`array_intersect` 的作用是:返回两个或多个数组中都存在的值。换句话说,它会比较数组的值,然后输出一个新的数组,其中包含所有出现在所有参数数组中的元素。
基本语法如下:
```php
</span><span><span class="hljs-title function_ invoke__">array_intersect</span></span><span>(</span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$array1</span></span><span>, </span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$array2</span></span><span>, </span><span><span class="hljs-keyword">array</span></span><span> ...</span><span><span class="hljs-variable">$arrays</span></span><span>): </span><span><span class="hljs-keyword">array</span></span><span>
</span></span>
$array1:必选参数,待比较的第一个数组。
$array2:必选参数,待比较的第二个数组。
...$arrays:可选参数,更多需要参与比较的数组。
返回值:一个包含所有交集元素的新数组。
思路很简单:
使用 array_intersect 取出两个数组的交集。
如果结果数组不为空,就说明存在交集;反之,则不存在。
下面是一个简单的示例,演示如何判断两个数组是否有交集:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$array1</span></span><span> = [</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-number">4</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>];
</span><span><span class="hljs-variable">$array2</span></span><span> = [</span><span><span class="hljs-number">4</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>, </span><span><span class="hljs-number">6</span></span><span>, </span><span><span class="hljs-number">7</span></span><span>, </span><span><span class="hljs-number">8</span></span><span>];
</span><span><span class="hljs-comment">// 使用 array_intersect 取交集</span></span><span>
</span><span><span class="hljs-variable">$intersection</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_intersect</span></span><span>(</span><span><span class="hljs-variable">$array1</span></span><span>, </span><span><span class="hljs-variable">$array2</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-keyword">empty</span></span><span>(</span><span><span class="hljs-variable">$intersection</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"两个数组存在交集,交集元素为: "</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$intersection</span></span><span>);
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"两个数组没有交集"</span></span><span>;
}
</span></span>
输出结果为:
<span><span>两个数组存在交集,交集元素为: </span><span><span class="hljs-title class_">Array</span></span><span> ( [</span><span><span class="hljs-number">3</span></span><span>] => </span><span><span class="hljs-number">4</span></span><span> [</span><span><span class="hljs-number">4</span></span><span>] => </span><span><span class="hljs-number">5</span></span><span> )
</span></span>
可以看到,数组 $array1 和 $array2 的交集为 [4, 5],因此返回的结果不为空。
在有些情况下,我们只关心 是否存在交集,而不是具体的交集元素。这时可以简化逻辑:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$array1</span></span><span> = [</span><span><span class="hljs-string">'apple'</span></span><span>, </span><span><span class="hljs-string">'banana'</span></span><span>, </span><span><span class="hljs-string">'orange'</span></span><span>];
</span><span><span class="hljs-variable">$array2</span></span><span> = [</span><span><span class="hljs-string">'grape'</span></span><span>, </span><span><span class="hljs-string">'peach'</span></span><span>, </span><span><span class="hljs-string">'banana'</span></span><span>];
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">array_intersect</span></span><span>(</span><span><span class="hljs-variable">$array1</span></span><span>, </span><span><span class="hljs-variable">$array2</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"存在交集"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"不存在交集"</span></span><span>;
}
</span></span>
这样就能更直观地得到结果。
权限校验
用户角色数组与系统权限数组取交集,若不为空则说明用户具备访问权限。
标签匹配
用户兴趣标签与内容标签取交集,若存在则推荐相关内容。
关键词过滤
用户输入的关键词数组与敏感词数组取交集,若有交集则提示或拦截。
array_intersect 可以高效地找出多个数组的交集。
判断交集是否为空,就能得出两个数组是否存在相同元素。
在权限、推荐系统、内容过滤等实际业务中应用非常广泛。
通过合理利用 array_intersect,我们可以用极简的代码实现强大的逻辑判断,从而大大提升开发效率。
<span></span>