mysql数据库中的序列化数据需要组合在一个数组中

时间:2009-11-30 02:00:17

标签: php mysql serialization

我在PHP / MySQL工作。

我的数据库中有一个名为hourly的表,在该表中,它们是一个名为webaddress的列,这些列是序列化的。每个webaddresses列都有多行,每行都是序列化的。

我需要拉动每一行,取消它们,然后将它们放入一个数组中。

我尝试使用这段代码,但由于PHP函数的限制,它只抓取1行。

while ($row = mysql_fetch_array($results)) {$test = unserialize($row[0]);}

我在想这样的事情可能有用:

while(($row = mysql_fetch_array($results)) !== FALSE) {$test[] = $row;}

那不起作用......

我如何抓住每一行,然后取消它,然后将其添加到数组中?我只需要web_addresses字段中的数据,目前有3行数据。因此,每个web_addresses字段中都会有3个序列化数组,我需要将其反序列化并合并到另一个数组中。希望这更有意义。


这是MySQL表:

CREATE TABLE `hourly` (
  `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  `id` bigint(20) NOT NULL auto_increment,
  `month` longtext NOT NULL,
  `day` longtext NOT NULL,
  `year` longtext NOT NULL,
  `source` longtext NOT NULL,
  `web_address` longtext NOT NULL,
  `at_replies` longtext NOT NULL,
  `words` longtext NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1

2 个答案:

答案 0 :(得分:2)

编辑:现在根据OP的信息反映更新:

从您的问题来看,它听起来像每个行都有一个序列化列,并且该列包含每行三个项目的序列化数组。所以这应该有效:

$collection = array();
while ( $row = mysql_fetch_array($results)) {
    $values = unserialize($row[0]);
    # $values has unserialized the data into its own array with 3 items

    $collection = array_merge($collection, $values);
}

如果有三个db行,并且每个字段都有一个包含三个项目的序列化数组,$ collection现在包含一个包含9个项目的数组。

答案 1 :(得分:0)

将其更改为$test[] = unserialize($row[0])

它会将您的数据反序列化为数组,然后将该数组推送到$test数组中。要查看它的外观,请在循环后添加以下行:

print_r($test);

会是这样的:

array(
    [0] => array(
        // ... the first record's data
    ),
    [1] => array(
        // ... the second record's data
    ),
    // etc
)