When we cache files, we often need to convert php code or arrays into strings and save them in the database. Below I will introduce two methods of saving arrays to the database.
Method 1:
Use serialize to write, and then use unserialize to output
serialize() is to serialize the values of variables in PHP such as objects, arrays, etc. into strings and store them. We can store the serialized strings in other places such as databases and Sessions , Cookie, etc., the serialization operation will not lose the type and structure of these values. In this way, the data of these variables can be passed between PHP pages and even different PHP programs.
And unserialize() converts the serialized string back to a PHP value. What is returned is the converted value, which can be integer, float, string, array or object. If the passed string cannot be deserialized, FALSE
is returned
The code is as follows |
Copy code |
代码如下 |
复制代码 |
class db {
private $host;
private $user;
private $pwd;
private $dbname;
private $Mysqli;
function __construct($host, $user, $pwd, $dbname) {
$this->host = $host;
$this->user = $user;
$this->pwd = $pwd;
$this->dbname = $dbname;
$this->db();
}
function db() {
$this->mysqli = new mysqli ( $this->host, $this->user, $this->pwd, $this->dbname );
}
function select() {
$this->mysqli->query("SET CHARSET GBK");
$sql = "SELECT id,cname FROM hdw_channel";
$result = $this->mysqli
->query ( $sql );
$rows = array ();
while ( $row = $result->fetch_assoc () ) {
$rows [] = $row;
}
ECHO " ";
print_r ( $rows );
}
function __wakeup(){ //反序列化,
$this->db();
}
}
$chanel = new db("localhost",'root','','hdcms');
//$chanel->select();
session_start();
$_SESSION['channel_obj'] = serialize($chanel); //将对象序列化,保存的是对象的属性,没有方法,所以要用__wakeup()
class ren{
private $name;
private $age;
function __construct($name,$age){
$this->name =$name;
$this->age = $age;
}
function show(){
echo "姓名是:{$this->name} 年龄是:{$this->age}";
}
function __sleep(){
return array_keys(get_object_vars($this)); //或得数组里边的键名,序列化某些变量
}
}
$zao = new ren("赵六",44);
echo serialize($zao); //序列化(指定哪个变量序列化)
====================================
session_start();
include '59.php';
$channel_obj=unserialize($_SESSION['channel_obj']); //反序列化类对象
$channel_obj->select(); //有了__wakeup方法才可以起作用
|
class db {
private $host;
private $user;
private $pwd;
private $dbname;
private $Mysqli;
function __construct($host, $user, $pwd, $dbname) {
$this->host = $host;
$this->user = $user;
$this->pwd = $pwd;
$this->dbname = $dbname;
$this->db();
}
function db() {
$this->mysqli = new mysqli ( $this->host, $this->user, $this->pwd, $this->dbname );
}
function select() {
$this->mysqli->query("SET CHARSET GBK");
$sql = "SELECT id,cname FROM hdw_channel";
$result = $this->mysqli
->query ( $sql );
$rows = array ();
while ( $row = $result->fetch_assoc () ) {
$rows [] = $row;
}
ECHO "";
print_r ( $rows );
}
function __wakeup(){ //Deserialization,
$this->db();
}
}
$chanel = new db("localhost",'root','','hdcms');
//$chanel->select();
session_start();
$_SESSION['channel_obj'] = serialize($chanel); //Serialize the object and save the properties of the object. There are no methods, so use __wakeup()
class ren{
private $name;
private $age;
function __construct($name,$age){
$this->name =$name;
$this->age = $age;
}
function show(){
echo "Name is: {$this->name} Age is: {$this->age}";
}
function __sleep(){
Return array_keys(get_object_vars($this)); //Or get the key name in the array and serialize some variables
}
}
$zao = new ren("Zhao Liu",44);
echo serialize($zao); //Serialization (specify which variable to serialize)
====================================
session_start();
include '59.php';
$channel_obj=unserialize($_SESSION['channel_obj']); //Deserialize class object
$channel_obj->select(); //It only works with the __wakeup method
|
Method 2:
Use json_encode to write, and then use json_decode to output
Before json_encode, use urlencode() to process all the contents of all arrays, then use json_encode() to convert them into json strings, and finally use urldecode() to convert the encoded Chinese back.
The code is as follows
代码如下 |
复制代码 |
/**************************************************************
*
* 使用特定function对数组中所有元素做处理
* @param string &$array 要处理的字符串
* @param string $function 要执行的函数
* @return boolean $apply_to_keys_also 是否也应用到key上
* @access public
*
*************************************************************/
function arrayRecursive(&$array, $function, $apply_to_keys_also = false)
{
static $recursive_counter = 0;
if (++$recursive_counter > 1000) {
die('possible deep recursion attack');
}
foreach ($array as $key => $value) {
if (is_array($value)) {
arrayRecursive($array[$key], $function, $apply_to_keys_also);
} else {
$array[$key] = $function($value);
}
if ($apply_to_keys_also && is_string($key)) {
$new_key = $function($key);
if ($new_key != $key) {
$array[$new_key] = $array[$key];
unset($array[$key]);
}
}
}
$recursive_counter--;
}
/**************************************************************
*
* 将数组转换为JSON字符串(兼容中文)
* @param array $array 要转换的数组
* @return string 转换得到的json字符串
* @access public
*
*************************************************************/
function JSON($array) {
arrayRecursive($array, 'urlencode', true);
$json = json_encode($array);
return urldecode($json);
}
$array = array
(
'Name'=>'希亚',
'Age'=>20
);
echo JSON($array);
?>
|
|
Copy code |
|
/***************************************************** **********
*
* Use a specific function to process all elements in the array
* @param string &$array The string to be processed
* @param string $function The function to be executed
* @return boolean $apply_to_keys_also Whether it is also applied to keys
* @access public
*
*************************************************** ***********/
function arrayRecursive(&$array, $function, $apply_to_keys_also = false)
{
static $recursive_counter = 0;
If (++$recursive_counter > 1000) {
die('possible deep recursion attack');
}
foreach ($array as $key => $value) {
if (is_array($value)) {
arrayRecursive($array[$key], $function, $apply_to_keys_also);
} else {
$array[$key] = $function($value);
}
If ($apply_to_keys_also && is_string($key)) {
$new_key = $function($key);
if ($new_key != $key) {
$array[$new_key] = $array[$key];
unset($array[$key]);
}
}
}
$recursive_counter--;
}
/***************************************************** **********
*
* Convert array to JSON string (compatible with Chinese)
* @param array $array The array to be converted
* @return string The converted json string
* @access public
*
*************************************************** ***********/
function JSON($array) {
arrayRecursive($array, 'urlencode', true);
$json = json_encode($array);
return urldecode($json);
}
$array = array
(
'Name'=>'Shia',
'Age'=>20
);
echo JSON($array);
?>
http://www.bkjia.com/PHPjc/631572.html
www.bkjia.comhttp: //www.bkjia.com/PHPjc/631572.htmlTechArticleWhen we make cache files, we often need to convert php codes or arrays into strings and save them in the database, as follows Let me introduce two methods of saving arrays to the database. Method 1: Use...