2

我想在字段中存储短数组。(我意识到有理由将数组分解为项目并单独存储,但我选择了一个简单的存储选项,代价是功能较少。)

我创建数组的代码如下:

$str = "one,two,three,four";
$array = explode (",",$str)

然后我使用插入语句存储到 mysql 中的文本字段中它似乎存储得很好。在 PhPAdmin 中,它在字段中显示 ARRAY,如果我只是回显 $array,它会打印“ARRAY”。

当我尝试检索数据时出现问题。

我正在使用

while($row = mysql_fetch_array($res)) { 
$array = $row['list']; //that's the field it is stored in 
echo $array; // echoes "ARRAY"

//到目前为止,一切都很好。但是,当我尝试打印出数组的内容时,会收到错误消息。我尝试过使用 implode 以及每个。

$text = implode(",", $array);//yields error message improper argument in implode function
foreach($array as $val) {
    echo $val;
} //yields error message improper argument for for each statement

}

我在 dbase 中的条目可能不是正确的数组吗?问题可能是什么?感谢您的任何建议。

4

3 回答 3

2

以这种方式存储数组的常用方法是在输入之前序列化数据,并在检索时取消序列化。

$array = array('one', 'two', 'three', 'four');
$stringToStore = serialize($array);

之后:

while($row = mysql_fetch_array($res)) {
  $array = unserialize($row['list']);
  var_dump($array);
}
于 2012-04-06T20:53:08.577 回答
1

您插入的不是数组,而是 PHP 将您的数组评估为字符串形式的内容。要在 MySQL 中存储数组而不正确规范数据,您需要对其进行序列化。基本上你会想做这样的事情:

$serialized = implode(',', $arrayToStore);

然后将其存储在 MySQL 中。在它的路上,你会做:

$unserialized = explode(',', $arrayFromMySQL);
于 2012-04-06T20:50:00.803 回答
0

我认为你可以使用序列化,如果你的数组字符串如下(如果你不使用序列化)

$str = "one,two,three,four";

那么为什么在将其插入数据库之前将其设为数组,我认为您可以直接插入字符串,当您需要将字符串用作数组时,您可以简单地从数据库中检索字符串并使用explode使其成为数组像

while($row = mysql_fetch_array($res)) { 
$array = explode(",", $row['list']); // "one,two,three,four"
echo $array[0]; // one
于 2012-04-06T20:53:03.283 回答