本文实例讲述了php对象和数组相互转换的方法。分享给大家供大家参考

===========================方案一:$变量=(数据类型)值;

项目开发中,对象与数组的转换。

$变量=(数据类型)值; //将执行把值按指定的数据类型进行转换。

//数组转对象
$obj=(object)array("name"=>'张三22','password'=>'123456');
echo $obj->name;

//对象转数组
$arr=(array)$obj;
echo $arr['password'];

//自定义对象,然后转成数组
$obj2=(object)"";
$obj2->xingming="李四";
$obj2->shengao="177";
$arr2=(array)$obj2;
echo $arr2['shengao'];

 

===========================方案二:直接使用自定义函数

这里定义2个php匿名对象和数组相互转换的函数,代码如下:

<?php

function array2object($array) {
if(is_array( $array)) {
$obj= new  StdClass();
foreach($array  as  $key=> $val){
$obj->$key= $val;
}
}
else{ $obj= $array; }
return $obj;
}
function object2array($object) {
if(is_object($object)) {
foreach($object  as  $key=> $value) {
$array[$key] = $value;
}
}
else{
$array= $object;
}
return $array;
}
//用法示例如下:
$array= array('foo'=> 'bar','one'=> 'two','three'=> 'four');
$obj= array2object($array);
print$obj->one; // output's "two"

$arr= object2array($obj);
print$arr['foo']; // output's bar
?>
 

 

 

批量更新记录2种方案分析

表结构:
/* 方案一:
foreach($arr as $k=>$v){
$sql=”update obj_config2 set content='”.$v.”‘ where title2='”.$k.”‘”;
mysqli_query($conn,$sql);
}
*/
/*
上面即是循环一条一条的更新记录。一条记录update一次,这样性能很差,也很容易造成阻塞。
那么能不能一条sql语句实现批量更新呢?mysql并没有提供直接的方法来实现批量更新,但是可以用点小技巧来实现。
UPDATE categories
    SET 字段1 = CASE 字段2
        WHEN 1 THEN 3
        WHEN 2 THEN 4
        WHEN 3 THEN 5
    END
WHERE 字段2 IN (1,2,3)
这句sql的意思是,更新 字段1 字段,如果‘字段2‘=1 则‘字段1’ 的值为3,如果‘字段2‘=2 则‘字段1’ 的值为4,如果‘字段2‘=3 则‘字段1’ 的值为5。
*/
//方案二:推荐使用,这个效率更高,因为是拼装成一个完成的sql更新的。
$sql=”update obj_config2 set content = CASE title2  “;
foreach($arr as $k=>$v){
$sql.=”WHEN ‘”.$k.”‘ THEN ‘”.$v.”‘ “;
}
$sql.=”END”;

mysql时间函数,字符串时间转成时间戳;时间戳转换成字符串

时间函数。
sql:
unix_timestamp($strdate); //把我们的字符串时间-》时间戳格式。

若 $strdate为空!则返回的是当前的时间戳!

FROM_UNIXTIME($intdate);//把我们的时间戳-》字符串。

在sql中如何获得当前的年月日,时分秒?

FROM_UNIXTIME(unix_timestamp());

update users set addtime=FROM_UNIXTIME(unix_timestamp()) where username=’jacky’ and password=’abc123′

遍历文件夹的2种方法

遍历文件夹的2种方法
方法一:
<?php
$i="upfiles";//$i是要显示的目录,*表示当前目录下所有目录和所有文件
while($file=glob($i)){
 
foreach($file as $s){
 
//$t=is_dir($s) ? "[文件夹] $s<br />" : "[文件] $s<br />";
if(!is_dir($s)){
echo $s."<br/>";
}
 
}
 
$i.="/*";
 
}
 
?>

 

方法二:
核心知识点:
$dir=opendir("目录");
readdir( $dir );
closedir( $dir );
 
 
 
function showlist($folderdir){
$dirname=$folderdir;
$dir = opendir( $dirname );
while( $file = readdir( $dir ) ){
 
if($file!="."&&$file!=".."&&is_dir($dirname."/".$file)){
showlist($dirname."/".$file);
}
else if($file!="."&&$file!="..") {
echo $file."<br/>";
}
}
closedir( $dir );
}
 
showlist("upfiles");

 

解决Error(1133): Can’t find any matching row in the user table

刚刚尝试使用同步文件法把整个mysql的数据文件传送到另外一台服务器做双机备份。

转移完成后通过命令行形式用root账户连接上mysql查看了一下,所有数据完好,用户数据也转移过来了。

但是当我把网站数据也导入该服务器之后,所有需要访问mysql数据库的网站全部出现了无法连接的错误,症状就如同密码错误一样。

使用phpmyadmin进入mysql查看,在权限页面也可以正常看到所有的mysql账户,在mysql.user表中所有的数据也很正常。

然后我尝试了一下修改导入的账户的密码,使用了


1
SET PASSWORD FOR ‘username’@‘localhost’ = PASSWORD( ‘****’ )

的方法,收到了以下错误提示

Error (1133): Can’t find any matching row in the user table

经过在网上各种查询之后,找到的最简单的办法就是在mysql命令行中执行set FLUSH

PRIVILEGES
;
这一语句即可。

发生这一错误的原因是在变更了mysql.user表之后,没有使用FLUSH PRIVILEGES命令来更新权限表(grant tables)

设置服务器的MySQL允许远程访问/外网访问

进入mysql:

mysql -uroot -p

输入密码。

选择mysql数据库:

use mysql;

增加允许远程访问的用户或者允许现有用户的远程访问。
给root授予在任意主机(%)访问任意数据库的所有权限。

update user set host='%' where user='root' and host='localhost';

退出mysql:

exit

重启数据库:

[root@localhost ~]# service mysqld restart

microtime()返回当前 Unix 时间戳和微秒数

1秒(second) = 1000毫秒(millisecond) = 1000,000微秒(microsecond)

PHP函数microtime()返回当前 Unix 时间戳和微秒数。

默认返回字符串 "microsec sec" ,其中 sec 为自 Unix 纪元(0:00:00 January 1, 1970 GMT)起的秒数,microsec 为微秒部分。

microtime(get_as_float);如果 get_as_float 参数设置为 TRUE,则返回浮点数,表示自 Unix 纪元起精确到微秒的以秒为单位的当前时间。
徐多蔚 xuduowei 徐老师 合肥php老师

sql中的正则

//REGEXP 是sql中的正则。

select * from infos where tuijian REGEXP ‘[1]’;

SELECT * FROM infos WHERE CONCAT(“,”,tuijian,”,”) REGEXP “,[13],”;//检索1或者3的
SELECT * FROM infos WHERE CONCAT(“,”,tuijian,”,”) REGEXP “,(13),”;//检索13的。

//检索,1,3或者13的。
SELECT * FROM infos WHERE CONCAT(“,”,tuijian,”,”) REGEXP “,[13],” or CONCAT(“,”,tuijian,”,”) REGEXP “,(13),”
SELECT * FROM infos WHERE CONCAT(“,”,tuijian,”,”) REGEXP “,(13)|[13],”