将 PHP 数组存储在单个 SQL 单元格中
Posted
技术标签:
【中文标题】将 PHP 数组存储在单个 SQL 单元格中【英文标题】:Store a PHP array in a single SQL cell 【发布时间】:2012-07-19 12:29:43 【问题描述】:如果某个项目作为数组或类似数据类型存储在我的 SQL 数据库中并且无法找到有关该主题的满意信息,我希望将成分存储起来
在 php 中,信息将存储为 ingredient["$id"]=true or false
,其中 $id 代表一种成分
所以对于普通面包(请注意,这主要还是伪代码,因为数据输入端尚未启动)
//code that creates array this bit is still theory and will be manually emulated in the db for the time being
$id=1;
while (isset ($_POST["ingredient part of form".$ID]))
if ($_POST["ingredient".$id]==checked)
$p["ingredient"][$id]=true;
else
$p["ingredient"][$id]=false
$id++;
//the code that gets the values back for the ingredient name we will use a separate array ingredient_n[$id]
echo p[$prod_id]["item"].': '
$id=1
while (isset ($ingredient[$id]))
if ($p[$prod_id]["ingredient"][$id]==true)
if ($id!=1)
echo ', ';
echo $ingredient_n[$id];
echo '.';
这应该会产生类似
'普通面包:小麦粉、水、盐、酵母。'
我查看了 ENUM 和 SET,但这会使添加新成分变得更加困难
【问题讨论】:
【参考方案1】:根据主题(将 PHP 数组存储在单个 SQL 单元中)判断,您应该将其序列化。有一些标准化的方法
$array["a"] = "Hello";
$array["b"] = "World";
$array["c"] = "!";
$str = serialize($array);
// The contents of $str
// a:3:s:1:"a";s:5:"Hello";s:1:"b";s:5:"World";s:1:"c";s:1:"!";
反向使用反序列化
$unserializedString = unserialize($str);
您可以将它用于数组和对象。
http://php.net/manual/en/function.serialize.php【讨论】:
【参考方案2】:如果我的 SQL 数据库中的项目作为数组或类似数据类型无法找到有关该主题的满意信息,我希望将成分存储起来
如果序列化数据是面向数据库问题的答案,那么您可能问错了问题。 Normalise 您的数据库,您可能会将成分插入到单独的表中,使用 JOIN 检索它们。这使您的数据库更易于使用、更易于搜索和更易于维护。
这就是说;在某些情况下,存储序列化字符串实际上是最可行的解决方案,但这种情况似乎并非如此。
【讨论】:
同意这个,但是题目把这个问题分了一点。 是的,Berry 说的 :) 也使数据库更小,也可能有人认为这使数据更加独立于实现。 如何在主表中有多个值的情况下使用连接,即 PLAIN BREAD 有 4 种成分(这是最小的列表),我是否不需要为每种潜在成分设置一列? @HectorJamesHaddow 阅读规范化,为您自己的利益。不,四种成分不需要四列,另一个表中需要四行。是的,这会产生多行,但如果您想知道哪些产品包含"yeast"
成分,您会很高兴您已经标准化了您的数据库。
还有另一个表,其中包含 id 和成分,这就是 while(row=...) ingredient_n[row[id]]=row[ingredient]
的组成部分(称为带有成分_n[$id] 的表格)所以说ingredient_n[4]=yeast
然后if ($ingredient[$4]==true)
包含酵母; else
不含酵母;`以上是关于将 PHP 数组存储在单个 SQL 单元格中的主要内容,如果未能解决你的问题,请参考以下文章
如何访问数组并将其存储在python中的单个数组中(类似于matlab中的单元格)
从单个单元格中获取整个数组,该单元格是包含相同数组公式的单元格集合的一部分?