Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua |仅表参数白名单_Lua_Lua Table - Fatal编程技术网

Lua |仅表参数白名单

Lua |仅表参数白名单,lua,lua-table,Lua,Lua Table,我正在尝试创建一个允许的参数的白名单,以便从args表中删除表中未包含的所有提供的参数 local args = { "99", "lollypop", "tornado", "catid", "CATID", "filter_mediaType", "one", "10", } local args_whitelist = { &qu

我正在尝试创建一个允许的参数的白名单,以便从args表中删除表中未包含的所有提供的参数

local args = {
"99",
"lollypop",
"tornado",
"catid",
"CATID",
"filter_mediaType",
"one",
"10",
}

local args_whitelist = {
"beforeafter",
  "catid",
  "childforums",
  "display",
  "element_id",
  "element_type",
  "exactname",
  "filter_mediaType",
  "filter_order",
  "filter_order_Dir",
  "filter_search",
  "filter_tag",
  "format",
  "id",
  "Itemid",
  "layout",
  "limit",
  "limitstart",
  "messageid",
  "more",
  "option",
  "order",
  "ordering",
  "quality",
  "query",
  "recently",
  "recip",
  "reply_id",
  "return",
  "searchdate",
  "searchf",
  "searchphrase",
  "searchuser",
  "searchword",
  "sortby",
  "start",
  "task",
  "tmpl",
  "token",
  "view",
  "component",
  "path",
  "extension"
}

--[[
Do something here to eliminate and remove unwanted arguments from table
]]
--args[key] = nil --remove the argument from the args table

print(args) --[[ Output i want based of my whitelist of allowed arguments only

catid
filter_mediaType

]]

如何让我的代码对照我的白名单表检查args表,然后运行我的delete函数从args表中删除垃圾args。

我建议更改您的
白名单
,以便进行更简单的检查。正如Nicol Bolas所指出的,这可以通过在运行时反转表格来实现,以允许快速检查和易于维护

local args = {
"99",
"lollypop",
"tornado",
"catid",
"CATID",
"filter_mediaType",
"one",
"10",
}

local args_whitelist = {
"beforeafter",
  "catid",
  "childforums",
  "display",
  "element_id",
  "element_type",
  "exactname",
  "filter_mediaType",
  "filter_order",
  "filter_order_Dir",
  "filter_search",
  "filter_tag",
  "format",
  "id",
  "Itemid",
  "layout",
  "limit",
  "limitstart",
  "messageid",
  "more",
  "option",
  "order",
  "ordering",
  "quality",
  "query",
  "recently",
  "recip",
  "reply_id",
  "return",
  "searchdate",
  "searchf",
  "searchphrase",
  "searchuser",
  "searchword",
  "sortby",
  "start",
  "task",
  "tmpl",
  "token",
  "view",
  "component",
  "path",
  "extension"
}

--[[
Do something here to eliminate and remove unwanted arguments from table
]]
--args[key] = nil --remove the argument from the args table

print(args) --[[ Output i want based of my whitelist of allowed arguments only

catid
filter_mediaType

]]
反转该表将使用字符串索引的数字填充
白名单
表,从而允许检查if语句是否只是args中值的索引

然后,您可以在
args
列表中循环,并检查arg是否在
白名单上。
如果它出现在
白名单上
将值添加到新列表中,我将在我的示例中使用
approved
。检查所有
args
后,您可以设置
args=approved
,这将清除表中所有未批准的值

local args = {
"99",
"lollypop",
"tornado",
"catid",
"CATID",
"filter_mediaType",
"one",
"10",
"beforeafter",
}

local function invert_table(target)
    local t = {}
    for k,v in pairs(target) do
        t[v] = k
    end
    return t
end

local args_whitelist = invert_table(args_whitelist)


local approved = {}
for _,v in pairs(args) do
    if args_whitelist[v] then
        approved[#approved + 1] = v
    end
end
args = approved

诚然,这也是一个最小的性能成本,因为反转只会发生在设置上。我会在答案中加上这个。这是一个相当巧妙的技巧。我必须记住将来使用它。谢谢