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

如何检查数组值是否存在于MySQL查询?现有判断代码失效求助

问题分析与修正方案

嘿,我来帮你排查代码里的问题!你的思路是对的,但核心问题出在$wpdb->get_results()的返回值类型上——它默认返回的是对象数组,而不是你需要的纯字符串数组,这就导致array_intersect()没法正确对比两个数组的内容。

具体问题拆解

当你执行$tag_checker = $wpdb->get_results( "SELECT tag FROM custom_tag" );后,$tag_checker的结构大概是这样的:

Array(
    [0] => stdClass Object( [tag] => 'Monday' ),
    [1] => stdClass Object( [tag] => 'Wednesday' ),
    ...
)

而你的$days是纯字符串数组,array_intersect()没法把对象和字符串做匹配,自然得不到正确的结果。

修正方案

有两种简单的解决办法,选哪个都可以:

方法1:用wp_list_pluck()提取字符串数组

WordPress自带的wp_list_pluck()可以直接从对象数组里提取指定字段的值,转换成纯字符串数组:

$tag_checker = $wpdb->get_results( "SELECT tag FROM custom_tag" );
$days = array( 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday' );

// 提取所有tag字段的值到纯字符串数组
$tag_values = wp_list_pluck($tag_checker, 'tag');

// 现在可以正常对比了
if( empty( array_intersect( $tag_values, $days ) ) ) :
    // 执行你的逻辑
endif;

方法2:直接用$wpdb->get_col()获取单列数据

如果只需要tag这一列的数据,用get_col()更高效,它直接返回纯字符串数组,省去后续处理:

// 直接获取tag列的纯字符串数组
$tag_values = $wpdb->get_col( "SELECT tag FROM custom_tag" );
$days = array( 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday' );

if( empty( array_intersect( $tag_values, $days ) ) ) :
    // 执行你的逻辑
endif;

额外提示:大小写匹配问题

如果数据库里的tag值大小写不统一(比如存的是monday而不是Monday),array_intersect()会认为这是不同的值。可以统一转换成小写再对比,避免这个问题:

$tag_values_lower = array_map('strtolower', $tag_values);
$days_lower = array_map('strtolower', $days);

if( empty( array_intersect( $tag_values_lower, $days_lower ) ) ) :
    // 执行你的逻辑
endif;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:35:28