1 回答
TA贡献1827条经验 获得超4个赞
回答我自己的问题,以便任何像您这样偶然发现这篇文章的未来访问者都可以学习到这个问题的简单化解决方案。
$filters = array(
"filter_type_pc" => "My SQL query",
"filter_type_mac" => "My SQL query",
"filter_type_linux" => "My SQL query"
);
if (!empty($_POST)) {
$arrayMatch = array_intersect_key($_POST, $filters);
foreach(array_keys($arrayMatch) as $filterName) {
$newFilter = $filters[$filterName];
}
} else {
$newFilter = "ORDER BY time_altered DESC";
};
让我们来分解一下:
首先,我们检查请求是否为空,因为我们无法知道使用PHP在DOM中单击了哪个过滤器按钮,因此我们将其留空。
$_POST
因为我们检查了整个超级全局变量,所以它会在请求中采取任何东西,如果你有几个请求,我们通过以下方式解决这个问题:
$_POST
使用匹配键和数组。
array_intersect_key
$_POST
$filters
创建一个仅包含匹配结果的新数组。
$arrayMatch
然后,我们用 和 遍历新创建的数组的匹配键,然后将键命名为 。
foreach()
array_keys()
$filterName
最后,我们可以通过使用新变量将数组的值定义为数组的值来获得数组的值。
$newFilter
$filters
$filterName
编辑:
我想出了一个比上面更好的解决方案,而上面的解决方案按预期工作 - 它可能会与前面提到的未来实现发生冲突。这将解决此问题,并且仅检查包含数组中键的请求。POST
$filters = array(
"filter_type_pc" => "My SQL query",
"filter_type_mac" => "My SQL query",
"filter_type_linux" => "My SQL query"
);
$newFilter = "ORDER BY time_altered DESC";
$arrayMatch = array_intersect_key($_POST, $filters);
foreach(array_keys($arrayMatch) as $filterName) {
if (isset($_POST[$filterName])) {
$newFilter = $filters[$filterName];
}
};
- 1 回答
- 0 关注
- 90 浏览
添加回答
举报