You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP如何判断数组中是否已存在键不同但指定子项值相同的元素

实现方法

你可以通过以下两种常用方案实现判断,按需选择即可:

方案1:遍历校验(适合小规模数组)

直接遍历现有$term数组,逐行对比item子项的内容是否相等,PHP中数组用==对比时只要所有键值对完全匹配就会返回true,刚好满足需求。

示例代码

// 封装判断函数
function hasSameItem(array $term, array $newElement): bool
{
    foreach ($term as $element) {
        if ($element['item'] == $newElement['item']) {
            return true;
        }
    }
    return false;
}

// 业务调用逻辑
$term = array();
$common_item = array('id' => 0, 'full_name' => 'my great name');
$first_item = array('name' => 'Robert', 'item' => $common_item);
$second_item = array('name' => 'Roberto', 'item' => $common_item);

// 添加前校验
if (!hasSameItem($term, $first_item)) {
    $term[] = $first_item;
}
// 此处因为已有相同item,不会重复添加
if (!hasSameItem($term, $second_item)) {
    $term[] = $second_item;
}

方案2:哈希校验(适合大规模数组,性能更高)

如果$term数组数据量较大,每次遍历的时间成本较高,可以额外维护一个哈希集合,将item序列化后作为索引,判断时直接查询索引是否存在即可,时间复杂度为O(1)。

示例代码

$term = array();
// 额外维护item哈希集合
$existItemHash = array();

function addElementIfNotExist(array &$term, array &$hashSet, array $newElement): void
{
    $itemHash = serialize($newElement['item']);
    if (!isset($hashSet[$itemHash])) {
        $hashSet[$itemHash] = true;
        $term[] = $newElement;
    }
}

// 调用
$common_item = array('id' => 0, 'full_name' => 'my great name');
$first_item = array('name' => 'Robert', 'item' => $common_item);
$second_item = array('name' => 'Roberto', 'item' => $common_item);

addElementIfNotExist($term, $existItemHash, $first_item);
addElementIfNotExist($term, $existItemHash, $second_item);

补充说明

  • 如果你需要判断的是item是否为完全相同的内存对象,而非只是内容相同的两个数组,可以把对比逻辑中的==替换为===
  • 两种方案都支持item为嵌套数组的场景,不需要额外修改逻辑

内容的提问来源于stack exchange,提问作者Bobby Redjeans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:36:08