8

如果某个项目作为数组或类似数据类型存储在我的 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 但这会使添加新成分变得更加困难

4

2 回答 2

16

从主题来看(将 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);

您可以将它用于数组和对象。

于 2012-07-20T08:40:06.013 回答
5

如果我的 SQL 数据库中的项目作为数组或类似数据类型无法找到有关该主题的满意信息,我希望将成分存储

如果序列化数据是面向数据库问题的答案,那么您很可能问错了问题。规范化您的数据库,您可能会将成分插入到单独的表中,使用 JOIN 检索它们。这使您的数据库更易于使用、更易于搜索和更易于维护。

那就是说;在某些情况下,存储序列化字符串实际上是最可行的解决方案,但这种情况似乎并非如此。

于 2012-07-20T08:45:41.927 回答