Soo i have saved a array inn my database using var_export($myarray, true);
But when im trying to get the array from the database later i cant figure out how to do it. here is what ive tried now
$henl = $yam->fetchObject(User::class); $bfore = $henl->bfore; echo $bfore["obj2"];
This does not work, but when i echo $henl->bfore
i get this
array ( 'obj1' => 1000000000, 'obj2' => 0, 'obj3' => 100, 'obj4' => 9032, 'obj4' => 0, )
Soo my question is how do i get $bfore["obj2"];
to print out the value of obj2 in the array?
Here is how it looks in the database: https://i.imgur.com/Snk6Pb9.png
Advertisement
Answer
Using var_export
BE AWARE This method is included because this is the answer to the question as asked; however, either of the other two methods is what you are actually looking for!
Let’s assume you have an array…
$array = [ 'obj1' => 1000000000, 'obj2' => 0, 'obj3' => 100, 'obj4' => 9032, 'obj4' => 0, ];
You can turn it into a string like so (presumably this is what you do)…
$arrayString = var_export($array, true); var_dump($arrayString); /* Output: string(80) "array ( 'obj1' => 1000000000, 'obj2' => 0, 'obj3' => 100, 'obj4' => 0, )" */
As you can see the $arrayString
contains a string and not an array. You need to eval
the string to return it to a usable array…
eval('$returnedArray = ' . $arrayString . ';'); var_dump($returnedArray); /* Output: array(4) { ["obj1"]=> int(1000000000) ["obj2"]=> int(0) ["obj3"]=> int(100) ["obj4"]=> int(0) } */ echo $returnedArray["obj2"]; // Output: 0
Using json_*
Of course there are many potential pitfalls using eval
in your code (especially if you don’t have full control/supervision over the strings that will be passed to it!
So a better option may be to encode the data in a JSON string. PHP has built in functions to do just this: json_encode
and json_decode
Convert array to JSON string:
$jsonString = json_encode($array); var_dump($jsonString); /* Output: string(48) "{"obj1":1000000000,"obj2":0,"obj3":100,"obj4":0}" */
Convert back to array:
$returnedArray = json_decode($jsonString, true); // The second parameter forces return of an array over an object var_dump($returnedArray); /* Output: array(4) { ["obj1"]=> int(1000000000) ["obj2"]=> int(0) ["obj3"]=> int(100) ["obj4"]=> int(0) } */
Using serialize
Naturally it doesn’t stop there. PHP has specific functions to serialize data so that it can be stored in a textual format and returned to PHP usable data as well…
Serialize the string:
$serialString = serialize($array); var_dump($serialString); /* Output: string(77) "a:4:{s:4:"obj1";i:1000000000;s:4:"obj2";i:0;s:4:"obj3";i:100;s:4:"obj4";i:0;}" */
Return the serialized string to a variable:
$returnedArray = unserialize($serialString); var_dump($returnedArray); /* Output: array(4) { ["obj1"]=> int(1000000000) ["obj2"]=> int(0) ["obj3"]=> int(100) ["obj4"]=> int(0) } */