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

PHP如何检查指定值是否存在于二维数组的对应子数组中

错误原因
  • 你直接使用in_array()在白名单的一级数组中做校验,一级数组的元素都是子数组,根本不存在users、kites这类字符串值,所以两个判断都返回不存在。
  • 你的白名单数组本身结构不统一:table是一级关联键,但是column被包在了一个索引为0的子数组里,正常应该统一把参数名作为一级键,方便后续校验。
修复方案

推荐方案:先统一白名单结构(最易维护)

先把白名单改成统一的关联数组结构,参数名作为一级键,对应允许的值作为子数组,直接取对应键的子数组做校验即可:

// 修正后结构统一的白名单
$query_string_params_and_values_white_list = [
    'table' => ['users', 'members'],
    'column' => ['keyword', 'phrase']
];

$table = 'users';
$column = 'kites';

// 校验table值
if (isset($query_string_params_and_values_white_list['table']) && in_array($table, $query_string_params_and_values_white_list['table'])) {
    echo 'exists';
} else {
    echo 'no exists';
}

// 校验column值
if (isset($query_string_params_and_values_white_list['column']) && in_array($column, $query_string_params_and_values_white_list['column'])) {
    echo 'exists';
} else {
    echo 'no exists';
}

运行后输出结果为exists、no exists,完全符合预期。

兼容原有混乱结构的方案

如果无法修改白名单的原有结构,可以写一个通用递归函数遍历所有层级的子数组判断值是否存在:

$query_string_params_and_values_white_list = array('table'=>array('users','members'),array('column'=>array('keyword','phrase')));

$table = 'users';
$column = 'kites';

// 递归检查值是否存在于数组任意层级
function recursive_in_array($needle, $haystack) {
    foreach ($haystack as $item) {
        if (is_array($item)) {
            if (recursive_in_array($needle, $item)) {
                return true;
            }
        } else {
            if ($item === $needle) {
                return true;
            }
        }
    }
    return false;
}

// 校验table
echo recursive_in_array($table, $query_string_params_and_values_white_list) ? 'exists' : 'no exists';
// 校验column
echo recursive_in_array($column, $query_string_params_and_values_white_list) ? 'exists' : 'no exists';

内容的提问来源于stack exchange,提问作者Nut Cracking Dude

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:06:04