【问题标题】:unserialize() value insert with serialize() of database.?使用数据库的 serialize() 插入 unserialize() 值。?
【发布时间】:2011-11-06 16:24:25
【问题描述】:

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

我在数据库中有这个: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:"";}

点赞:

  • 咖啡
  • 游戏笔记
  • 互联网
  • 游泳池

【问题讨论】:

  • 将这种依赖于语言的数据存储在数据库中并不是一个好主意。如果你想从 PHP 迁移到 JSP、ASP 等,你必须找到一种方法来转换这些数据。此外,使用 SELECT 查询在序列化数组/对象中查找数据也非常麻烦。将它们放在规范化表结构中的最佳解决方案;或者至少使用 json_encode() 因为其他语言支持解码 JSON 字符串的方式有很大的变化。

标签: php database arrays serialization foreach


【解决方案1】:

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

$arr = unserialize($dbString);

echo "<ul>";

foreach($arr as $key => $val)
{
    echo "<li>$val</li>";
}

echo "</ul>";

这将回显一个包含value 的列表,因为foreach() 遍历unserialize()d 数组,正如您在问题中指定的那样。

$key =&gt; $partforeach() 的锦上添花;如果您想要获取数组键,只需引用$key。如果您想要该键的数据,请使用$val


如果您只想回显一个元素(您的示例是Internet),请不要使用循环并按键(整数)引用它:

$arr = unserialize($dbString);

echo $arr[2];

这个echos 是它自己的数组中的第三个元素。

【讨论】:

  • 如果只想回显Internet,怎么样?
  • 请举例回答上述问题
  • PHP中有一个很棒的函数,就是print_r()。您可以使用它来打印任何类型的数据结构。只需检查 print_r(unserialize($dbString)) 的输出,您肯定会得到打印“Internet”的线索。
  • @Emma 查看我的编辑。你能像 Amil 说的那样编辑你的原始问题以使用 print_r() 显示 PHP 数组吗?
【解决方案2】:

原问题

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

$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。在更多的编程语言中更容易编码和解码,如果您需要直接更新数据库,则更容易由人工编辑。

【讨论】:

  • 如果只想回显Internet,怎么样? (请举例回答问题)
猜你喜欢
  • 2012-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-08
  • 1970-01-01
  • 2021-02-09
相关资源
最近更新 更多