2

我有一个数组正在通过如下形式收集:

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

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

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

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

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

4 回答 4

4

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

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

$options = unserialize($serializedoptions);

serialize()如果您找到支持它的代码,其他语言也可以反序列化 PHP 。例如,这里是 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>";
}
?>
于 2012-10-09T21:19:45.757 回答
2

print_r在未序列化的数组上使用:

print_r(unserialize($serializedArray));
于 2012-10-09T21:20:01.160 回答
1

您可以使用反序列化命令。然后,您可以使用 var_dump() 或 print_r() 回显它。

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

所以首先,你会反序列化那个值,所以让我们说

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

然后,您可以遍历新的 $contractors 数组,并
在每个数组之后回显一个,所有这些都在同一个 TD 内。

上面的序列化数据我其实不能反序列化,所以不能给你写循环。

于 2012-10-09T21:20:51.677 回答
0

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

于 2012-10-09T21:19:45.630 回答