我想在字段中存储短数组。 (我意识到有理由将阵列分解为项目并单独存储,但我选择了一个简单的存储选项,但代价是功能较少。)
我创建数组的代码如下:
$str = "one,two,three,four";
$array = explode (",",$str)
然后我使用insert语句存储到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中的输入可能不是一个合适的数组吗?问题是什么?感谢您的任何建议。
答案 0 :(得分:2)
以这种方式存储数组的常用方法是在输入之前serialize数据,并在检索时unserialize。
$array = array('one', 'two', 'three', 'four');
$stringToStore = serialize($array);
随后:
while($row = mysql_fetch_array($res)) {
$array = unserialize($row['list']);
var_dump($array);
}
答案 1 :(得分:1)
您插入的内容不是数组,而是PHP将您的数组评估为字符串形式。要在MySQL中存储数组而不正确地规范化数据,您需要对其进行序列化。基本上你想做类似的事情:
$serialized = implode(',', $arrayToStore);
然后将其存储在MySQL中。在出去的时候你会做:
$unserialized = explode(',', $arrayFromMySQL);
答案 2 :(得分:0)
我认为如果您的数组字符串如下,您可以使用serialize以及(如果您不使用序列化)
$str = "one,two,three,four";
那么为什么在将数组插入数据库之前将其作为数组,我认为你可以直接插入字符串,当你需要将字符串用作数组时,你可以简单地从数据库中检索字符串并使其成为一个数组数组使用像
这样的爆炸while($row = mysql_fetch_array($res)) {
$array = explode(",", $row['list']); // "one,two,three,four"
echo $array[0]; // one