如何检查数组值是否存在于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
相关产品推荐
相关产品推荐

