unserialize()值插入数据库的serialize()。

时间:2011-08-30 10:09:28

标签: php database arrays serialization foreach

我使用函数serialize()插入数据库值(数组),如何在标记unserialize()中使用<ul><li>...回显它们?

我在数据库中有这个:a:6:{i:0;s:15:"Coffee";i:1;s:14:"Satellite";i:2;s:11:"Game Notes";i:3;s:14:"Internet";i:4;s:10:"Pool";i:5;s:0:"";}

  

LIKE:

     
      
  • 咖啡
  •   
  • 游戏笔记
  •   
  • 因特网
  •   
  •   

2 个答案:

答案 0 :(得分:2)

如您所说,您需要使用unserialize()循环,如下所示:

foreach()

这将回显包含$arr = unserialize($dbString); echo "<ul>"; foreach($arr as $key => $val) { echo "<li>$val</li>"; } echo "</ul>"; 的列表,因为value遍历foreach() d数组,正如您在问题中指定的那样。

unserialize()$key => $part的锦上添花;如果你想获得数组键,只需引用foreach()。如果您需要该密钥的数据,请使用$key


如果你想只回显一个元素(你的例子是$val),就不要使用循环并按键引用它(整数):

Internet

这个$arr = unserialize($dbString); echo $arr[2]; 是数组中第三个元素。

答案 1 :(得分:0)

原始问题

对数据进行反序列化并将其循环打印出来。请注意,我还添加了检查,以确定我们正在返回一个数组,并且它在循环之前包含一些内容。

$data = unserialize($row['like']);
if(is_array($data) and count($data)) {
    echo '<ul>';
    foreach($like as $value) {
        echo '<li>' . $value . '</li>';
    }
    echo '</ul>';
}

因特网

我认为这就是你要求的。仅在其Internet

时回显该值
$data = unserialize($row['like']);
if(is_array($data) and count($data)) {
    echo '<ul>';
    foreach($like as $value) {
        if('Internet' != $value) {
            continue;
        }
        echo '<li>' . $value . '</li>';
    }
    echo '</ul>';
}

JSON

如果可以,我会停止使用序列化并使用json_encode代替。在更多编程语言中编码和解码更容易,如果您需要直接更新数据库,人工编辑更容易。