Php 在MySQL表中存储数组

Php 在MySQL表中存储数组,php,mysql,arrays,multidimensional-array,Php,Mysql,Arrays,Multidimensional Array,我有一个5级多维数组。数组中的键的数量会波动,但我需要将其存储在数据库中,以便稍后使用PHP访问它。有什么简单的方法可以做到这一点吗 我的想法是使用几个不同的分隔符(如*和%*)将数组转换为单个字符串,然后在需要时使用一系列分解将数据转换回数组 目前我还没有编写任何代码,因为我希望有更好的方法来实现这一点。但我确实有一个潜在的解决方案,我试图在下面概述: 以下是我的阵列的概述: n=button number i=item number btn[n][0] = but

我有一个5级多维数组。数组中的键的数量会波动,但我需要将其存储在数据库中,以便稍后使用PHP访问它。有什么简单的方法可以做到这一点吗

我的想法是使用几个不同的分隔符(如*和%*)将数组转换为单个字符串,然后在需要时使用一系列分解将数据转换回数组

目前我还没有编写任何代码,因为我希望有更好的方法来实现这一点。但我确实有一个潜在的解决方案,我试图在下面概述:

以下是我的阵列的概述:

n=button number
i=item number
btn[n][0]               = button name
btn[n][1]               = button desc
btn[n][2]               = success or not (Y or N)
btn[n][3]               = array containing item info
    btn[n][3][i][0]     = item intput type (Default/Preset/UserTxt/UserDD)
    btn[n][3][i][1]     = array containing item value - if more than one index then display as drop down
下面是我将要使用的分隔符:

#*Button Title                      //button title
    &*val1=*usr1234                 //items and values
    &*val2=*FROM_USER(_TEXT_$*name:)        //if an items value contains "FROM_USER" then extract the data between the perenthesis
    &*val3=*FROM_USER(_TEXT_$*Time:)        //if the datatype contains _TEXT_ then explode AGAIN by $* and just display a textfield with the title
    &*val4=*FROM_USER($*name1@*value1$*name2@*value2)       //else explode AGAIN by $* for a list of name value pairs which represent a drop box - name2@*value2

//sample string - a single button
#*Button Title%*val1=*usr1234&*val2=*FROM_USER(_TEXT_$*name:)&*val3=*FROM_USER(_TEXT_$*date:)&*val4=*FROM_USER($*name1@*value1$*name2@*value2)

总之,我正在寻找如何在单个数据库表中存储多维数组的一些想法。

请看一看或

您需要的是一个方法。不要发明你自己的,已经有很多了。最明显的候选者是JSON或特定于PHP的。XML也是一种选择,尤其是当您的数据库可能在某种程度上支持它时。

对您来说,最好的决定是

除了序列化存储在数据库中之外,json_编码还有一些优点

小一点的 如果你 必须手动修改数据库中的数据serialize将出现一些问题,因为此格式存储已序列化的值的大小,修改此值时必须计算并修改此参数。
SQL mySQL或任何其他变体都不支持数组数据类型

在SQL中处理此类数据的方法是跨多个表存储数据

因此,在本例中,一个表包含buttonID、buttonName、ButtonAccess等字段,另一个表包含buttonInputType和buttonInputValue字段,以及buttonID以链接回父表

这将是推荐的关系式做事方式。这样做的意义在于,当时间到来时,可以更轻松地从数据库中查询数据

不过,还有其他选择

一种选择是使用mySQL的枚举功能。由于输入类型有一组固定的可用值,因此可以为其使用枚举字段,这样就不需要为其使用额外的表

当然,另一个选择是其他人所建议的,只需使用json_encode或类似的方法序列化数据,并将其存储在一个大的文本字段中

如果数据将被用作一个简单的数据块,而不需要运行查询来检查其中的一部分,那么这有时可能是最简单的解决方案。这不是一个数据库专家想要看到的东西,但是从实用的角度来看,如果它能完成任务,那么就可以随意使用它


然而,重要的是要意识到这些限制。通过使用序列化解决方案,您基本上是说这些数据根本不需要以任何方式进行管理,因此我不必费心为其进行适当的数据库设计。。这很好,只要您不需要管理它或在其中搜索值。如果你这样做了,你需要更仔细地考虑你的数据库设计,注意使用“easy”选项。

您可以在单个表中使用子-父关系来存储行级别的数据,也可以将数组编码为json。您可以对其进行json编码并保存该字符串。您可以使用php的serialize/unserialize将数组转换为字符串或从字符串转换为字符串无需发明序列化方法,PHP已经实现了不止一个。尝试使用serialize或更通用的json编码,您只需使用会话即可。serialize非常完美!我不敢相信我真的要做所有这些工作。你刚刚救了我几个小时的命。请注意,PHP的序列化格式实际上只受PHP支持。为了让数据尽可能中立地存储在数据库中,我更喜欢JSON。谢谢,但没关系。我没有在这个项目中使用PHP以外的任何东西。