使用php

时间:2015-11-17 14:18:44

标签: php mysql arrays

我试图将有理函数的系数存储到MySQL 5.5数据库中。这是使用PHP 5完成的,我不太喜欢。

更详细地说,我有两个数组,每个数组代表分子和分母多项式(因式形式)的系数。两个数组的大小在1到10之间是动态的,如果需要,我可以将数字排序为任意顺序。所有数字都是double类型。

存储在数据库中我只需比较相等的函数。这意味着我只需要确定两个数组是否具有相同的系数(顺序无关紧要)。例如。 [1,2,3]和[3,1,2]是相同的。

由于MySQL不提供直接保存数组,我不确定如何以最佳方式处理此任务。

我目前的想法,我还不确定是否可行,是按降序对两个数组进行排序。然后将每个double转换为8个符号的字符串,连接所有字符串。之后我会将那个(长)字符串存储为VARCHAR。为了比较两个函数,我将比较分子和分母字符串,如果两者匹配,则函数是相同的。

我用这种方法看到的一个问题是'类型转换'。将double解释为8个字符非常粗糙,我不知道结果符号是否可能提前结束字符串或导致任何问题。

这引出了我的问题,这种方式有用还是有更好的方法呢?

1 个答案:

答案 0 :(得分:0)

是的,这应该有用,并且可能是一种很好的方法。

如果您只检查相等性,则只需要转换为某些规范字符串表示形式,并将其保存在数据库中。较短的表示形式更适合空间使用,但使其仍然是人类可读的也很好,因为这应该有助于即时查询和调试。

请注意,的顺序rational function很重要。此外,如果你正在处理floating-point,你需要注意那些不完全相同但可能足够接近你正在做的事情的数字。

一些选择:

  • 存储两列,每列都以逗号分隔的数字列表(中间缺少系数的零)。将它们与implode
  • 放在一起
  • 存储一列,其中包含两个以逗号分隔的列表,以/个字符分隔。
  • 存储两个VARBINARY列,每个列长8 x n 个字节(其中 n 是系数的数量)。这在C或Java或perl中很容易,在PHP中使用pack函数。
  • 存储一个VARBINARY列,格式化长度字节 + 数据 + 数据。再次使用pack功能。