Adding serialized data to an array - PHP - php
I have a three serialized data structures.
a:2:{i:0;s:151:"[["1","0","0","1","0","0","1","0","1","0","0","0"],["1","0","0","0","1","0","0","0","1","0","1","1"],["1","0","1","0","1","0","1","0","1","0","0","1"]]";i:1;s:151:"[["1","0","1","0","1","0","1","0","1","0","1","0"],["1","0","1","0","1","1","0","1","0","1","0","1"],["1","0","1","0","1","0","1","1","1","0","1","1"]]";}
a:2:{i:0;s:163:"[["10","0","0","0","30","0","0","60","0","0","0","0"],["20","0","0","30","0","0","20","0","0","0","50","0"],["30","0","0","0","20","0","0","30","0","20","0","30"]]";i:1;s:154:"[["20","0","0","0","0","0","0","0","0","0","0","0"],["30","0","0","0","0","0","0","0","0","0","0","0"],["40","0","0","0","0","0","0","0","0","0","0","0"]]";}
a:4:{i:0;s:151:"[["1","0","0","1","0","0","1","0","1","0","0","0"],["1","0","0","0","1","0","0","0","1","0","1","1"],["1","0","1","0","1","0","1","0","1","0","0","1"]]";i:1;s:151:"[["1","0","1","0","1","0","1","0","1","0","1","0"],["1","0","1","0","1","1","0","1","0","1","0","1"],["1","0","1","0","1","0","1","1","1","0","1","1"]]";i:2;s:151:"[["1","1","1","0","1","1","1","0","0","0","1","1"],["1","1","1","0","0","1","1","1","1","0","1","1"],["1","1","1","1","0","0","1","1","1","1","1","1"]]";i:3;s:151:"[["1","0","1","0","0","0","1","0","1","0","0","2"],["1","0","0","2","1","0","1","0","1","1","0","1"],["1","0","2","1","1","1","0","1","0","1","1","1"]]";}
I want to add all three serialized data into a single serialized array.
I tried this code and its work, but I want to be able to add additional data.
$data2=unserialize($value['monthly_forecast']);
$data1=unserialize($temp['monthly_forecast']);
//print_r($data1);
$combinedData = array($data1, $data2);
$monthly_forecast=serialize($combinedData);
$temp['monthly_forecast']=$monthly_forecast;
What about unserialize then array_merge() and then serialize the merged array back? Note that array_merge() can be used to
Merge one or more arrays
so you should be able to apply it in your case.
Edit:
You have a couple of options. You can either unserialize and merge everything into a single array and then serialize that. Or, you can also:
$array = array($serialized_data_1, $serialized_data_2, $serialized_data_3);
$all_serialized = serialize($array);
And then, to access the data:
$all_unserialized = unserialize($array);
$unserialized_data_1 = unserialize(all_unserialized[0]);
$unserialized_data_2 = unserialize(all_unserialized[1]);
$unserialized_data_3 = unserialize(all_unserialized[2]);
Related
PHP JSON Arrays within an Array
I have a script that loops through and retrieves some specified values and adds them to a php array. I then have it return the value to this script: //Returns the php array to loop through $test_list= $db->DatabaseRequest($testing); //Loops through the $test_list array and retrieves a row for each value foreach ($test_list as $id => $test) { $getList = $db->getTest($test['id']); $id_export[] = $getList ; } print(json_encode($id_export)); This returns a JSON value of: [[{"id":1,"amount":2,"type":"0"}], [{"id":2,"amount":25,"type":"0"}]] This is causing problems when I try to parse the data onto my android App. The result needs to be something like this: [{"id":1,"amount":2,"type":"0"}, {"id":2,"amount":25,"type":"0"}] I realize that the loop is adding the array into another array. My question is how can I loop through a php array and put or keep all of those values into an array and output them in the JSON format above?
of course I think $getList contains an array you database's columns, use $id_export[] = $getList[0] Maybe can do some checks to verify if your $getList array is effectively 1 size
$db->getTest() seems to be returning an array of a single object, maybe more, which you are then adding to a new array. Try one of the following: If there will only ever be one row, just get the 0 index (the simplest): $id_export[] = $db->getTest($test['id'])[0]; Or get the current array item: $getList = $db->getTest($test['id']); $id_export[] = current($getList); //optionally reset() If there may be more than one row, merge them (probably a better and safer idea regardless): $getList = $db->getTest($test['id']); $id_export = array_merge((array)$id_export, $getList);
Why does my JSON array turn into an object?
I am trying to unset a value from test_bots.json and save it back, but somehow the data format is being changed in the process. test_bots.json contains this JSON array: ["John","Vladimir","Toni","Joshua","Jessica"] My code looks like this: $good = 'Toni'; $good_arr = file_get_contents('test_bots.json'); $good_arr = json_decode($good_arr); if(in_array($good, $good_arr)){ $key = array_search($good, $good_arr); unset($good_arr[$key]); $good_arr2 = json_encode($good_arr); file_put_contents('test_bots.json',$good_arr2); } The output that's saved is: {"0":"John","1":"Vladimir","3":"Joshua","4":"Jessica"} but I want the output to look like: ["John","Vladimir","Joshua","Jessica"] I tried to unserialize the array before saving it, but it's not working. Why is this happening?
In order for json_encode to convert a PHP array with numeric keys to a JSON array rather than a JSON object, the keys must be sequential. (See example #4 in the PHP manual for json_encode.) You can accomplish this in your code by using array_values, which will reindex the array after you have removed one of the items. $good_arr2 = json_encode(array_values($good_arr));
Serialized multidimensional stored in MySQLi does not print past first array
Confusing title, the basics are that I'm saving a fully sorted and ordered multidimensional array from a script and into MySQL. I then, on another page, pull it from the database and unserialize it, and then proceed to print it out with this, $s = "SELECT * FROM gator_historical_data WHERE channelid = '{$chanid}'"; $r = $link->query($s); $comboarray = array(); while ($row = mysqli_fetch_assoc($r)) { $comboarray[] = unserialize($row['dataarray']); } foreach ($comboarray as $item) { $desc = $item['content']['description']; $title = $item['content']['title']; $datetime = $item['datetime']; // ... ^^^ problems getting array data } The problem is that it doesn't take the full array from MySQL, only the first entry and thus only prints the first 'array'. So where the returned value from dataarray looks like this (var_dump): http://pastebin.com/raw.php?i=Z0jy55sM the data stored into the unserialized $comboarray only looks like this (var_dump): http://pastebin.com/raw.php?i=Ycwwa924 TL;DR: Pulling a serialized multidimensional array from a database, unserializing and it loses all arrays after the first one. Any ideas what to do?
The string you've got is a serialized string plus something more at the end that is also a serialized string again and again: a:3:{s:6:"source";s:25:"World news | The Guardian";s:8:"datetime ... ... story01.htm";}}a:3:{s:6:"source";s:16:"BBC News - World"; ^^^ This format is not supported by PHP unserialize, it will only unserialize the first chunk and drop everything at the end. Instead create one array, serialize it and store that result into the database. Alternatively you can try to recover for the moment by un-chunking the string, however in case the paste was done right, there are more issues. But on the other hand the paste obvious isn't the done fully correct.
PHP/MYSQL array storing and retrieval issue
I want to store short arrays in a field. (I realize there are reasons to break the array up into items and store separately, but I'm opting for a simple storage option at the expense of less capability.) My code to create the array is as follows: $str = "one,two,three,four"; $array = explode (",",$str) I then store into a text field in mysql using an insert statement It seems to store fine. In PhPAdmin, it shows ARRAY in the field and if I just echo $array, it prints "ARRAY". The problem is occurring when I try to retrieve data. I am retrieving using while($row = mysql_fetch_array($res)) { $array = $row['list']; //that's the field it is stored in echo $array; // echoes "ARRAY" //so far so good. However, when I then try to print out the contents of the array, I get error messages. I have tried using implode and also for each. $text = implode(",", $array);//yields error message improper argument in implode function foreach($array as $val) { echo $val; } //yields error message improper argument for for each statement } Could my entry in the dbase not be a proper array? What could the problem be? Thanks for any suggestions.
The usual approach to storing an array in this way is to serialize the data before input, and unserialize it upon retrieval. $array = array('one', 'two', 'three', 'four'); $stringToStore = serialize($array); Later: while($row = mysql_fetch_array($res)) { $array = unserialize($row['list']); var_dump($array); }
What you're inserting is not an array, just what PHP has evaluated your array as being in string form. To store an array in MySQL without properly normalizing your data you'll need to serialize it. Basically you'd want to do something like: $serialized = implode(',', $arrayToStore); and then store that in MySQL. On its way out then you'll do: $unserialized = explode(',', $arrayFromMySQL);
I think you can use serialize and also (if you don't use serialize) if your array string is as follows $str = "one,two,three,four"; then why you are making it an array before inserting it into your database, I think you can insert the string directly and when you need to use your string as an array then you can simply retrieve the string from database and make it an array using explode like while($row = mysql_fetch_array($res)) { $array = explode(",", $row['list']); // "one,two,three,four" echo $array[0]; // one
How to store MySql values as Multidimensional Array using PHP
I have a database table as follows. <table border='1'><th>Id</th><th>FirstName</th><th>last Name</th><tr><td>1</td><td>Tom</td><td>T</td></tr><tr><td>2</td><td>Jerry</td><td>J</td></tr></table> I would like to store all values as a multi dimensional array using php(using a while loop to retrieve fields).That is, I would like the data to be echoed as: array(array(1,Tom,T),array(2,Jerry,J));
$result = mysql_query("SELECT * FROM tablename;"); while($result_ar = mysql_fetch_array($result)) { $multid_array[] = $result_ar; } after which $multid_array will be an array of arrays.
You can use phps serialize function to convert any variable into a string representation $string = serialize($dbData); You can use unserialize() to convert the string back into arrays, objects, etc $dbData = unserialize($string); Once you have the data within a string, it's very easy to store in a file, db, etc. A disadvantage is that you won't be able to search your database easily for this data.