PHP进阶篇总结笔记
一.数组
1.创建
$arr = array();表示创建一个空数组,并把创建的空数组赋值给变量$arr。
2.赋值,取值
$fruit = array("苹果","香蕉","菠萝");
array('0'=>'苹果');
$fruit0 = $fruit['0'];
3.for循环出数组内的值
$fruit=array('苹果','香蕉','菠萝');
for($i=0; $i<3; $i++){
echo '<br>数组第'.$i.'值是:'.$fruit[$i];
}
4.foreach循环出数组内的值
$fruit=array('苹果','香蕉','菠萝');
foreach($fruit as $k=>$v){
echo '<br>第'.$k.'值是:'.$v;
}
5.关联数组初始化,非索引
$fruit = array(
'apple'=>"苹果",
'banana'=>"香蕉",
'pineapple'=>"菠萝"
);
//赋值
array('apple'=>'苹果');
//取值
$fruit0 = $fruit['banana'];
6.foreach循环出关联数组的值
$fruit=array('apple'=>"苹果",'banana'=>"香蕉",'pineapple'=>"菠萝");
foreach($fruit as $k=>$v){
echo '<br>水果的英文键名:'.$k.',对应的值是:'.$v;
}
二.函数
使用return关键字可以使函数返回值,可以返回包括数组和对象的任意类型,如果省略了
return,则默认返回值为 NULL。
返回语句会立即中止函数的运行,并且将控制权交回调用该函数的代码行,因此下面函数的
返回值跟上面的函数是一样的。
函数不能返回多个值,但可以通过返回一个数组来得到类似的效果。
function numbers() {
return array(1, 2, 3);
}
list ($one, $two, $three) = numbers();
可变函数
即通过变量的值来调用函数,因为变量的值是可变的,所以可以通过改变一个变量的值来实
现调用不同的函数。经常会用在回调函数、函数列表,或者根据动态参数来调用不同的函数
。可变函数的调用方法为变量名加括号。
function name() {
echo 'jobs';
}
$func = 'name';
$func(); //调用可变函数
判断函数是否存在
function func() {
}
if (function_exists('func')){
echo 'exists';
}
四.字符串操作
1.单引号与双引号
不能混用即开始与结尾必须相同,双引号中可直接包含字符串
$str='hello';
echo "str is $str"; //运行结果: str is hello
echo 'str is $str'; //运行结果: str is $str
2.字符串链接用 .
3.去除空格
trim去除一个字符串两端空格。
rtrim是去除一个字符串右部空格,其中的r是right的缩写。
ltrim是去除一个字符串左部空格,其中的l是left的缩写。
4.获取字符串的长度strlen()
$str = 'hello';
$len = strlen($str);
echo $len;//输出结果是5
5.字符串的截取 substr(),中文mb_substr()
函数说明:substr(字符串变量,开始截取的位置,截取个数)
$str='i love you';
//截取love这几个字母
echo substr($str, 2, 4);
$str='我爱你,中国';
//截取中国两个字
echo mb_substr($str, 4, 2, 'utf8');
6.查找字符串strpos()
$str = 'I want to study at imooc';
$pos = strpos($str, 'imooc');
echo $pos;//结果显示19,表示从位置0开始,imooc在第19个位置开始出现
7.替换字符串str_replace()
$str = 'I want to learn js';
$replace = str_replace('js', 'php', $str);
echo $replace;//结果显示I want to learn php
8.格式化字符串sprintf()
函数说明:sprintf(格式, 要转化的字符串)
$str = '99.9';
$result = sprintf('%01.2f', $str);
echo $result;//结果显示99.90
9.字符串的分割与合并,合并implode(),分割explode()
函数说明:implode(分隔符[可选], 数组)
返回值:把数组元素组合为一个字符串
$arr = array('Hello', 'World!');
$result = implode('', $arr);
print_r($result);//结果显示Hello World!
函数说明:explode(分隔符[可选], 字符串)
返回值:函数返回由字符串组成的数组
$str = 'apple,banana';
$result = explode(',', $str);
print_r($result);//结果显示array('apple','banana')
10.字符串的转义addslashes()
函数说明:用于对特殊字符加上转义字符,返回一个字符串
返回值:一个经过转义后的字符串
$str = "what's your name?";
echo addslashes($str);//输出:what\'s your name?
六.会话控制(session与cookie)
1.设置cookie
$value = 'test';
setcookie("TestCookie", $value);
setcookie("TestCookie", $value, time()+3600); //有效期一小时
setcookie("TestCookie", $value, time()+3600, "/path/", "imooc.com"); //设置路径
与域
因为Cookie是通过HTTP标头进行设置的,所以也可以直接使用header方法进行设置。
header("Set-Cookie:cookie_name=value");
//删除
setcookie('test', '', time()-1);
2.session
session_start();
$_SESSION['test'] = time();
var_dump($_SESSION);
//删除unset
session_start();
$_SESSION['name'] = 'jobs';
unset($_SESSION['name']);
echo $_SESSION['name']; //提示name不存在
七.文件系统
1.读取文件内容file_get_contents()
可以将整个文件全部读取到一个字符串中
$content = file_get_contents('./test.txt');
file_get_contents也可以通过参数控制读取内容的开始点以及长度。
$content = file_get_contents('./test.txt', null, null, 100, 500);
2.判断文件是否存在is_file(),file_exists
只是判断文件存在,使用file_exists就行,file_exists不仅可以判断文件是否存在,同时
也可以判断目录是否存在,从函数名可以看出,is_file是确切的判断给定的路径是否是一
个文件。
可以使用is_readable与is_writeable在文件是否存在的基础上,判断文件是否可读与可写
。
$filename = './test.txt';
if (file_exists($filename)) {
echo file_get_contents($filename);
}
3.写入到文件file_put_contents
$filename = './test.txt';
$data = 'test';
file_put_contents($filename, $data);
$data参数可以是一个一维数组,当$data是数组的时候,会自动的将数组连接起来,相当于
$data=implode('', $data);
4.获取文件的修改时间
fileowner:获得文件的所有者
filectime:获取文件的创建时间
filemtime:获取文件的修改时间
fileatime:获取文件的访问时间
5.取得文件的大小filesize()
function getsize($size, $format = 'kb') {
$p = 0;
if ($format == 'kb') {
$p = 1;
} elseif ($format == 'mb') {
$p = 2;
} elseif ($format == 'gb') {
$p = 3;
}
$size /= pow(1024, $p);
return number_format($size, 3);
}
$filename = '/data/webroot/usercode/code/resource/test.txt';
$size = filesize($filename);
$size = getsize($size, 'kb'); //进行单位转换
echo $size.'kb';
6.删除文件unlink(),删除文件夹rmdir()
unlink($filename);
rmdir($dir);
foreach (glob("*") as $filename) {
unlink($filename);
}
八.日期和时间
1.获取Unix时间戳 time()
它表示从 1970年1月1日 00:00:00 到当前时间的秒数之和。
2.获取当前日期date()
//date函数,第二个参数取默认值的情况
echo date("Y-m-d");//2014-03-30
//date函数,第二个参数有值的情况
echo date("Y-m-d",'1396193923');//2014-03-30,1396193923表示2014-03-30的unix时间
戳
3.获取日期的Unix时间戳strtotime()
echo strtotime('2014-04-29');//1398700800,这个数字表示从1970年1月1日 00:00:00
到2014年4月29号经历了1398700800秒
4.将格式化的日期字符串转换为Unix时间戳
函数说明:strtotime(要解析的时间字符串, 计算返回值的时间戳【默认是当前的时间,可
选】)
返回值:成功则返回时间戳,否则返回 FALSE
echo strtotime("now");//相当于将英文单词now直接等于现在的日期和时间,并把这个日
期时间转化为unix时间戳。这个效果跟echo time();一样。
echo strtotime("+1 seconds");//相当于将现在的日期和时间加上了1秒,并把这个日期时
间转化为unix时间戳。这个效果跟echo time()+1;一样。
echo strtotime("+1 day");//相当于将现在的日期和时间加上了1天。
echo strtotime("+1 week");//相当于将现在的日期和时间加上了1周。
echo strtotime("+1 week 3 days 7 hours 5 seconds");//相当于将现在的日期和时间加
上了1周3天7小时5秒。
5.格式化格林威治时间gmdate()函数
举个例子,我们现在所在的中国时区是东八区,领先格林威治时间8个小时,有时候也叫
GMT+8,那么服务器运行以下脚本返回的时间应该是这样的:
当前时间假定是2014-05-01 15:15:22
echo date('Y-m-d H:i:s', time()); //输出为:2014-05-01 15:15:22
echo gmdate('Y-m-d H:i:s', time()); //输出为:2014-05-01 07:15:22 因为格林威治时
间是现在中国时区的时间减去8个小时,所以相对于现在时间要少8个小时
九.图形图像操作
//创建画布
$img = imagecreatetruecolor(100, 100);
//画笔颜色
$red = imagecolorallocate($img, 0xFF, 0x00, 0x00);
//使用imageline绘制线条
imageline($img,0,0,100,100,$red);
//通过header与imagepng进行图像的输出
header("content-type: image/png");
imagepng($img);
//最后调用imagedestroy释放该图片占用内存
imagedestroy($img);
//绘制文字
使用imagestring函数来进行文字的绘制,这个函数的参数很多:imagestring ( resource
$image , int $font , int $x , int $y , string $s , int $col ),可以通过$font来设
置字体的大小,x,y设置文字显示的位置,$s是要绘制的文字,$col是文字的颜色。
imagestring($img, 5, 0, 0, "Hello world", $red);
//保存成图片文件
$filename = 'img.png';//文件名
imagepng($img,$filename);//png格式
imagejpeg($img, $filename, 80);//jpg
使用imagepng可以将图像保存成png格式,如果要保存成其他格式需要使用不同的函数,使
用imagejpeg将图片保存成jpeg格式,imagegif将图片保存成gif格式,需要说明的是,
imagejpeg会对图片进行压缩,因此还可以设置一个质量参数。
//加水印实例
$filename = 'bei_01.jpg';
//开始添加水印操作
$im = imagecreatefromjpeg($filename);
$logo = imagecreatefrompng('logo.png');
$size = getimagesize('logo.png');
imagecopy($im, $logo, 15, 15, 0, 0, $size[0], $size[1]);
header("content-type: image/jpeg");
imagejpeg($im);
十一.数据库操作
1.判断是否已经安装
if (function_exists('mysql_connect')) {
echo 'Mysql扩展已经安装';
}
2.链接3种方式
mysql扩展进行数据库连接的方法:
$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password');
mysqli扩展:
$link = mysqli_connect('mysql_host', 'mysql_user', 'mysql_password');
PDO扩展
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
$dbh = new PDO($dsn, $user, $password);
3.数据库链接
$host = 'localhost';
$user = 'code1';
$pass = '';
$link = mysql_connect($host, $user, $pass);
mysql_select_db('code1');//选择数据库
mysql_query("set names 'utf8'");//设置链接使用的字符串
4.执行mysql查询
用mysql_query加sql语句的形式向数据库发送查询指令。
$res = mysql_query('select * from user limit 1');
查询类的语句会返回一个资源句柄(resource),可以通过该资源获取查询结果集中的数据
。
$row = mysql_fetch_array($res);
var_dump($row);
默认的,PHP使用最近的数据库连接执行查询,但如果存在多个连接的情况,则可以通过参
数指令从那个连接中进行查询。
$link1 = mysql_connect('127.0.0.1', 'code1', '');
$link2 = mysql_connect('127.0.0.1', 'code1', '', true); //开启一个新的连接
$res = mysql_query('select * from user limit 1', $link1); //从第一个连接中查询数
据
5.插入数据
$sql = "insert into user(name, age, class) values('李四', 18, '高三一班')";
mysql_query($sql); //执行插入语句
行插入语句以后,可以得到自增的主键id,通过PHP的mysql_insert_id函数可以获取该id。
$uid = mysql_insert_id();
6.取得查询结果
$row = mysql_fetch_array($result);
如果要获取数据集中的所有数据,我们通过循环来遍历整个结果集。
$data = array();
while ($row = mysql_fetch_array($result)) {
$data[] = $row;
}
7.分页查询
$page = 2;
$pagesize = 2;
$offset = ($page - 1) * $pagesize;
$sql = "select * from user limit $offset, $pagesize";
$result = mysql_query($sql);
//循环获取当前页的数据
$data = array();
while ($row = mysql_fetch_assoc($result)) {
$data[] = $row;
}
8.删除与更新
//更新
$sql = "update user set name = '曹操' where id=2 limit 1";
if (mysql_query($sql)) {
echo '更新成功';
}
//删除
$sql = "delete from user where id=2 limit 1";
if (mysql_query($sql)) {
echo '删除成功';
}
对于删除与更新操作,可以通过mysql_affected_rows函数来获取更新过的数据行数,如果
数据没有变化,则结果为0。
$sql = "update user set name = '曹操' where id=2 limit 1";
if (mysql_query($sql)) {
echo mysql_affected_rows();
}
9.关闭数据库链接
PHP会自动关闭数据库连接,一般情况下已经满足需求,但是在对性能要求比较高的情况下
,可以在进行完数据库操作之后尽快关闭数据库连接,以节省资源,提高性能。
mysql_close();
mysql_close($link);//多个链接