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 table.insert-插入到表时的奇怪行为_Lua_Lua Table - Fatal编程技术网

Lua table.insert-插入到表时的奇怪行为

Lua table.insert-插入到表时的奇怪行为,lua,lua-table,Lua,Lua Table,我很难弄清楚为什么我的代码会这样运行。我有一个名为players的表,结构为键、值对。这些值也是嵌套的表(项)。每个项目应至少包含一个名为“id”的唯一标识符,该标识符包含在嵌套表(键名)“specs”中 玩家={ ['identifier_one']={ { [“标签”]=“手电筒”, [“重量”]=1, [“名称”]=“武器手电筒”, [“规格”]={ [“口袋”]=假, [“id”]=“ZT345”,--这是我们的唯一标识符 [“装备”]=正确, [“堆栈”]=1, [“craft”]=t

我很难弄清楚为什么我的代码会这样运行。我有一个名为players的表,结构为键、值对。这些值也是嵌套的表(项)。每个项目应至少包含一个名为“id”的唯一标识符,该标识符包含在嵌套表(键名)“specs”中

玩家={
['identifier_one']={
{
[“标签”]=“手电筒”,
[“重量”]=1,
[“名称”]=“武器手电筒”,
[“规格”]={
[“口袋”]=假,
[“id”]=“ZT345”,--这是我们的唯一标识符
[“装备”]=正确,
[“堆栈”]=1,
[“craft”]=true
}
},
{
[“标签”]=“手电筒”,
[“重量”]=1,
[“名称”]=“武器手电筒”,
[“规格”]={
[“口袋”]=假,
[“id”]=“ACF124”,
[“装备”]=正确,
[“堆栈”]=1,
[“craft”]=true
}
}
},
[“另一项”]={
...
},
}
我已经正确地编写了数据结构。但是,当我插入一个新的嵌套项时,它会按预期将newItem添加到表中的下一个增量中,同时覆盖所有的previus索引。那么前面的项目['spec']['id']就变成了新的项目id,如果这有意义的话?因此,在上面的布局中,前面的id“ZT345”将变成“ACF124”。从而使两项内容完全相同

当我打印出新项目的组成时,一切都很完美,应该按照预期写入表中。起初,我认为这可能与写入数据库时将表编码为json有关。但是,如果我打印出players[identifier]表,在插入newItem之后,它就会覆盖所有以前的索引。因此,我非常确定问题在于将新项目插入我的玩家[标识符]

我的代码如下:

ESX.RegisterServerCallback('zombie-inventory:itemCheck',函数(源、cb、项)
--检查是否允许添加我们的项目。
如果项目[项目],则
本地src=源
本地标识符=getIdentifier(src)
本地newItem=项目[项目]
如果string.match(项目“武器”)那么
newItem['specs'][1]。id=genId(玩家[标识符])
结束
--这是代码崩溃的地方。
表.插入(玩家[标识符],新项目)
MySQL.Async.execute('UPDATE`user\u inventory`SET`inventory`=@inventory其中`identifier`=@identifier'{
['@identifier']=标识符,
['@inventory']=json.encode(玩家[标识符])
})
cb(真实)
其他的
打印(“[库存][^3警告^7]项目检查cb:%s”的项目无效):格式(项目))
结束
(完)

只是补充一下,genId()函数100%返回一个唯一的id,我已经打印了很多次了,它总是不同的

为什么要编写
newItem['specs'][1].id
而不是
newItem['specs'].id
?数据以json的形式存储在数据库中,因此当我提取它时,我会将它从json解码到lua表中。我使用的库,如果它是一个嵌套列表[],那么它会在lua中创建一个嵌套表作为非键值。所以在这个场景中,specs={1={our data}}没有1=如果你知道你的键是唯一的,为什么要使用insert?为什么不把值分配给表索引呢?是的,这就解决了,干杯:)
lua“LL838”:{“标签”:“手电筒”,“名称”:“武器”手电筒,“重量”:1,“规格”:{“装备”:真,“工艺”:真,“堆栈”:1,“口袋”:假},“JE275”:{“标签”:“手电筒”,“名称”:“武器手电筒”、“重量”:1,“规格”:{“装备”:真,“工艺”:真,“堆叠”:1,“口袋”:假}
你为什么写
newItem['specs'][1]。id
而不是
newItem['specs'].id
?数据作为json存储在数据库中,因此当我提取它时,我将它从json解码到lua表中。我使用的库,如果它看到的是一个嵌套列表[],那么它将在lua中创建一个嵌套表作为非键值。因此在这个场景中,specs={1={our data}没有1=如果你知道你的键是唯一的,为什么要使用insert?为什么不直接给表索引赋值?是的,修复了它,欢呼:)
lua“LL838”:{“label”:“Flashlight”,“name”:“wear_Flashlight”,“weight”:1,“specs”:{“equipment”:true,“craft”:true,“stack”:1,“pocket”:false}},“JE275”:{“标签”:“手电筒”,“名称”:“武器”手电筒,“重量”:1,“规格”:{“装备”:真,“工艺”:真,“堆叠”:1,“口袋”:假}