显示序列化数组

时间:2012-10-09 21:18:18

标签: php sql

我通过下面的表格收集数组:

<select multiple="multiple" name="contractors[]" >

输入代码以将数组保存在数据库中。

$options = $_POST['contractors'];  
$serializedoptions = serialize($options);

它以下面的格式将数组保存在DB中,但我无法正确显示它。当我拉整个它显示:

a:4:{i:0;s:28:Contractor1";i:1;s:15:"Contractor2";i:2;s:10:"Contractor3";}

如何让它以更易读的格式显示?

$result = mysql_query("SELECT * FROM form_2 GROUP BY jobname");

echo "<table border='1'>
<tr>
<th><font size='1'>Job Name</th>
<th><font size='1'>Contractors</th>
<th><font size='1'>Notes</th>
</tr>";

while($row = mysql_fetch_array($result))
  {
  echo "<tr>";
  echo "<td><font size='1'>" . $row['jobname'] . "</font></td>";
  echo "<td><font size='1'>" . $row['contractors'] . "</font></td>";
  echo "<td><font size='1'>" . $row['notes'] . "</font></td>";

  echo "</tr>";

  }
echo "</table>";

4 个答案:

答案 0 :(得分:4)

序列化的必须是非序列化的。在使用数据之前,只需对数据使用unserialize函数即可。在您的情况下,将返回一个数组。

http://php.net/manual/en/function.unserialize.php

$options = unserialize($serializedoptions);

如果您找到支持代码,其他语言也可以反序列化PHP serialize()。例如,以下是JavaScript的一个:http://phpjs.org/functions/unserialize/

编辑:

更新您添加的代码,一旦您反序列化该值,就可以像任何其他PHP变量一样显示它。

<?php
while ($row = mysql_fetch_array($result))
{
    echo "<tr>";
    echo "<td><font size='1'>" . $row['jobname'] . "</font></td>";
    echo "<td><font size='1'>";
    $contractors = unserialize($row['contractors']);
    foreach ($contractors as $contractor)
        echo htmlspecialchars($contractor).'<br/>';
    echo "</font></td>";
    echo "<td><font size='1'>" . $row['notes'] . "</font></td>";
    echo "</tr>";
}
?>

答案 1 :(得分:1)

在反序列化数组上使用print_r

print_r(unserialize($serializedArray));

答案 2 :(得分:1)

您可以使用unserialize命令。然后,您可以使用var_dump()或print_r()回显它。

在上面的HTML表中,您必须进一步细分$ row ['contractors']的结果。

首先,你要反序列化该值,所以我们说

$ contractors = unserialize($ row ['contractors']);

然后你可以遍历新的$ contractors承包商,并在每个承包商之后回复一个,在同一个TD内。

我实际上无法反序列化上面的序列化数据,所以我不能为你编写循环。

答案 3 :(得分:0)

使用unserialize($serializedoptions)将其转换回数组。如果要查看,请使用var_dump($unserialized)