2

以下のようなフォームを介して収集される配列があります。

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

配列をDBに保存するコードを入力します。

$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

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

unserialize コマンドを使用できます。その後、var_dump() または print_r() を使用してエコーできます。

上記の HTML テーブルでは、$row['contractors'] の結果をさらに分類する必要があります。

まず、その値をシリアル化解除します。

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

次に、$contractors の新しい配列を反復処理し
、すべて同じ TD 内でそれぞれの後に a をエコーし​​ます。

上記のシリアル化されたデータを実際に逆シリアル化することはできないため、ループを記述することはできません。

于 2012-10-09T21:20:51.677 に答える
0

unserialize($serializedoptions)配列に戻すために使用します。閲覧したい方はこちらをご利用くださいvar_dump($unserialized)

于 2012-10-09T21:19:45.630 に答える