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

PHP中判断数组是否包含WP_Term对象的条件写法求助

如何检测数组中是否包含WP_Term对象

首先得说,你用in_array('object', $array1)肯定行不通,问题出在这几点:

  • 你要找的是WP_Term类的实例对象,不是字符串'object';
  • $array1的直接元素是ID、label、value这些键值对,而目标对象藏在value这个子数组里,in_array默认只会检查当前数组的直接值,不会深入子数组;
  • 就算对象在当前数组层级,in_array默认的松散比较也没法准确判断对象类型,得用专门的对象检查方式。

下面给你几种靠谱的解决方案,根据你的需求选就行:

方法1:遍历子数组,用instanceof检查(最直观)

这是最容易理解和调试的方式,直接遍历value数组里的每个元素,判断是否是WP_Term的实例:

// 先初始化标记为false
$hasWpTerm = false;

// 先确保value键存在且是数组
if (isset($array1['value']) && is_array($array1['value'])) {
    foreach ($array1['value'] as $item) {
        // 用instanceof判断对象是否属于WP_Term类
        if ($item instanceof WP_Term) {
            $hasWpTerm = true;
            break; // 找到目标就停止循环,提升效率
        }
    }
}

// 最后判断输出
if ($hasWpTerm) {
    print 'correct';
}

instanceof是PHP中判断对象类型的标准关键字,它会准确检查一个对象是否是指定类(或其子类)的实例,完全适配你的需求。

方法2:用array_filter简化代码

如果你想写得更简洁,可以用array_filter过滤出所有WP_Term对象,再判断结果是否为空:

$hasWpTerm = false;

if (isset($array1['value']) && is_array($array1['value'])) {
    // 过滤出value数组里所有WP_Term对象
    $wpTermItems = array_filter($array1['value'], function($item) {
        return $item instanceof WP_Term;
    });
    // 如果过滤结果不为空,说明存在目标对象
    $hasWpTerm = !empty($wpTermItems);
}

if ($hasWpTerm) {
    print 'correct';
}

方法3:递归检查(如果需要深入所有层级)

如果你的数组结构不确定,对象可能藏在任意子数组里,可以写一个递归函数来遍历所有层级:

function hasWpTermRecursive($data) {
    foreach ($data as $item) {
        // 先检查当前元素是否是WP_Term对象
        if ($item instanceof WP_Term) {
            return true;
        }
        // 如果是数组,递归检查子数组
        if (is_array($item) && hasWpTermRecursive($item)) {
            return true;
        }
    }
    return false;
}

// 直接调用函数判断
if (hasWpTermRecursive($array1)) {
    print 'correct';
}

总结

  • 优先用前两种方法,因为你的示例数组里对象固定在value子数组中,不需要递归;
  • 永远用instanceof来判断对象类型,而不是字符串匹配或其他松散比较方式;
  • 记得先检查目标数组/键是否存在,避免出现Undefined index或非数组的错误。

内容的提问来源于stack exchange,提问作者Jarek Jajok

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:13:32