Serialized data in mysql database needs to combined in an array

余生长醉 提交于 2020-01-11 13:35:06

问题


I am working in PHP/MySQL.

I have a table in my database called hourly in that table their is a column named webaddress these are serialized. There are multiple rows of each column of webaddresses each is serialized.

I need to pull each row, unserailize them then put them into an array.

I tried using this bit of code but it only grabs 1 row because of the limitations of the PHP functions.

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

I was thinking something like this might work:

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

That didn't work ...

How can I grab each row, then unserailize it then add it to an array? I just need the data in the web_addresses field currently there is 3 rows of data. So there would be 3 serialized arrays in each web_addresses field that I need to unserialize and combine into another array. Hopefully that makes more sense.


Here is the MySQL table:

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

回答1:


EDIT: Now reflects updates based on info by the OP:

From your question it sounds like each row has one serialized column, and that column contains a serialized array of three items per rows. So this should work:

$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);
}

If there were three db rows, and each field had a serialized array with three items, $collection now contains an array with 9 items.




回答2:


change it to $test[] = unserialize($row[0]).

It will unserialize your data into an array, and then push that array into the $test array. To see how it looks, after your loop, add this line:

print_r($test);

It will be something like this:

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


来源:https://stackoverflow.com/questions/1817532/serialized-data-in-mysql-database-needs-to-combined-in-an-array

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!