文章目录
索引数组
- 两者区别
- 索引的一般定义
$数组名=array(值1,值2,值3…)
- 查看数组的元素的值
第一种方式,使用Print_r函数,来显示数组的值
$cars=array("Volvo","BMW","SAAB");
Print_r($cars);
第二种方式,数组名[键]
$cars=array("Volvo","BMW","SAAB");
echo "I like $cars[0], $cars[1] and $cars[2].";
4. 增加元素
5. PHP的数组各元素值可以是不同的数据类型
关联数组定义
- 定义
关联数组可以采用指定的键
<?php
$cars= array("Volvo"=>10, "BMW"=>5, "SAAB"=>23);
print_r($cars);
?>
2. 访问关联数据的元素
可以采用:数组名[键]
$cars= array("Volvo"=>10, "BMW"=>5, "SAAB"=>23);
echo "Volvo的数量是 $cars[Volvo]";
echo "</br>";
echo "BMW的数量是". $cars["BMW"];
多维数组定义
前面所学习的数组有一个特点:数组都只有一个维度
【实例1】内外层都是索引数组
声明:
$cars = array
(
array("Volvo",22,18),
array("BMW",15,13),
array("Saab",5,2),
array("Land Rover",17,15)
);
print_r($cars);
此图为:在浏览器中“查看源”的显示结果
访问元素:
数组名[外层键][内层键]
如:$cars[1][0],对应的元素值为“BMW”
【实例2】外层为索引数组,内层为关联数组
1.声明
$car = array(
array("品牌"=>"Volvo","库存"=>22,"销量"=>18),
array("品牌"=>"BMW","库存"=>15,"销量"=>13),
array("品牌"=>"Land Rover","库存"=>17,"销量"=>15)
);
print_r($car);
2.数组元素访问
$cars[1][“品牌”]结果为: “BMW”
【实例3】两层都是关联数组
$cars1 = array(
"Volvo" => array("库存"=>22,"销量"=>18),
"BMW"=>array("库存"=>15,"销量"=>13),
"Saab"=>array("库存"=>5,"销量"=>2),
"Land Rover"=>array("库存"=>17,"销量"=>15),
);
print_r($cars1);
索引数组编历
count()函数
作用:可以用来获得数组的元素个数,函数的参数,就是数组名称。
例1:for 循环实现遍历
$cars=array("Volvo","BMW","SAAB");
$arrlength=count($cars);
for($x=0;$x<$arrlength;$x++)
{
echo $cars[$x];
echo "<br/>";
}
例2:foreach 循环实现遍历
$cars=array("Volvo","BMW","SAAB");
foreach($cars as $value)
{
echo $value;
echo "<br/>";
}
关联数组的遍历
两种方式:
1.只需要显示数组元素的值
2.还需要获得每个元素的键
$cars=array("Volvo"=>21,"BMW"=>22,"SaaB"=>23);
foreach($cars as $key=>$value)
{
echo "$key=>$value <br/>";
}
多维数组的遍历
例1:内外层都是索引数组遍历
$cars=array(
array("Volvo",22,18),
array("BMW",15,13),
array("Saab",5,2),
array("Land Rover",17,15)
);
$outnum=count($cars);
for($i=0;$i<$outnum;$i++)
{
$innernum=count($cars[$i]);
for($j=0;$j<$innernum;$j++)
{
echo $cars[$i][$j]." ";
}
echo "<br/>";
}
例2:内外层都是关联数组实例
$cars = array
(
"Volvo"=>array("库存"=>22,"销量"=>18),
"BMW"=>array("库存"=>15,"销量"=>13),
"Saab"=>array("库存"=>5,"销量"=>2),
"Land Rover"=>array("库存"=>17,"销量"=>15) );
foreach($cars as $outKey=>$outValue){
echo $outKey.": ";
foreach($outValue as $innerKey=>$innerValue){
echo $innerKey."=>".$innerValue.",";
}
echo "<br/>";
}
索引数组的排序
<?php
$cars=array("Volvo","BMW","SAAB");
echo "原数组:";
print_r($cars);
echo "<br/>";
echo "升序后的数组:";
sort($cars);
print_r($cars);
echo "<br/>";
echo "降序后的数组:";
rsort($cars);
print_r($cars);
?>
关联数组的排序
$cars=array("Volvo"=>"35","BMW"=>"37","SAAB"=>"43");
echo "按值升序:";
asort($cars);
print_r($cars);
echo "<br/>";
echo "按值降序:";
arsort($cars);
print_r($cars);
echo "<br/>";
echo "按键升序:";
ksort($cars);
print_r($cars);
echo "<br/>";
echo "按键降序:";
krsort($cars);
print_r($cars);
echo "<br/>";
日期函数
- 语法格式
date(format,timestamp)
例1-获得日期
<?php
echo "今天是 " . date("Y/m/d") . "<br>";
echo "今天是 " . date("Y.m.d") . "<br>";
echo "今天是 " . date("Y-m-d") . "<br>";
?>
例2-获得时间
echo "现在时间是 " . date("h:i:sa");
echo "<br/>";
echo "现在时间是 " . date("H:i:s");
需要在这前面自己设置时区,才能变为当前时间
例3:时区设置
date_default_timezone_set("UTC");
echo "当前时间是 " . date("h:i:sa")."<br/>";
date_default_timezone_set("Asia/Shanghai");
echo "当前时间是 " . date("h:i:sa")."<br/>";
时间戳
不显示当前时间,要显示其他时间戳
$d=mktime(9, 12, 31, 6, 10, 2015);
echo "创建的时间戳是".$d;
echo "<br/>";
echo "创建日期是 " . date("Y-m-d h:i:sa", $d);
字符串函数
1.字符串长度函数-strlen
2.检索字符串函数-strpos
解释:"Hello world!"的位置从0开始计数,所以 "world"出现的位置序号为6
3.移除左侧字符-ltrim
ltrim(string,charlist)
同理 rtrim():右移
字符串分隔-explode
explode(separator,string,limit)
可以看到,这个函数内容有三个参数:
第一个参数separator,是必须的,用来规定在哪里分割字符串,或者说以什么字符或者分割符来分割字符串。
第二个参数string,也是必须的,它用来规定要分割哪个字符串。
第三个参数limit是可选的,规定所返回的数组元素的数目。如果省略掉,代表对数组元素不做限制,如果有这个参数,又有几种情况:
(1)如果limit>0则返回包含最多limit个元素的数组,比如limit为2,则返回的数组包含2个元素;
(2)如果limit<0则返回包含除了最后的-limit个元素以外的所有元素的数组,比如limit=-2,则返回减去最后2个元素的数组;
(3)如果limit=0,返回包含一个元素的数组。
$str='one,two,three,four';
//没有limit参数
$arr=explode(',',$str);
print_r($arr);
echo "<br/>";
//limit参数为0
$arr=explode(',',$str,0);
print_r($arr);
echo "<br/>";
//limit参数为正数
$arr=explode(',',$str,3);
print_r($arr);
echo "<br/>";
//limit参数为负数
$arr=explode(',',$str,-3);
print_r($arr);
echo "<br/>";
数组元素合成字符串-implode
implode(separator,array)
$arr = array('Hello','World!','I','love','you!');
echo implode(" ",$arr)."<br>";
echo implode("+",$arr)."<br>";
echo implode("-",$arr)."<br>";
echo implode("X",$arr);
用户定义函数
同C/C++
表单处理
1.POST表单数据
表单提交
<form action="welcome.php" method="post">
Name: <input type="text" name="name"><br>
E-mail: <input type="text" name="email"><br>
<input type="submit" value="提交">
</form>
“action=“welcome.php””,表示当用户填写此表单并点击提交按钮后,表单数据会发送到名为 “welcome.php” 的PHP文件供处理。
form表单定义了method=“post”,表示表单数据是通过 POST 方法发送的。提交表单的时候,表单中各个表单域的名称和值就以关联数组元素的形式添加到$_POST这个数组中,表单域的名称就是“键”,用户填写的值就是元素的值,这样的话,就可以通过数组元素访问的方式来获得用户在表单中填写的值了。
表单打印
welcome.php页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<?php
echo "欢迎".$_POST["name"]."<br/>";
echo "你的邮箱是:".$_POST["email"];
?>
</body>
</html>
2.GET表单数据
<form action="welcome.php" method="get">
Name: <input type="text" name="name"><br>
E-mail: <input type="text" name="email"><br>
<input type="submit" value="提交">
</form>
echo "欢迎".$_GET["name"]."<br/>";
echo "你的邮箱是:".$_GET["email"]
3.两者区别
(1)通过 GET 方法从表单发送的信息对任何人都是可见的(所有变量名和值都显示在 URL 中),而通过 POST 方法从表单发送的信息对其他人是不可见的。
(2)GET 对所发送信息的数量也有限制。限制在小于 2000 个字符,而POST对所发送信息的数量也无限制。
文件打开与读取
readfile()函数
readfile(filename):可以直接读取整个文件,并把它写入输出缓冲。
- filename是文件名称。
- 若成功,则返回从文件中读入的字节数。若失败,则返回 false。
需要新建一个test.txt,内容写为“124”
<?php
echo readfile("test.txt");
?>
显示:1243
fopen()函数
fopen(filename,mode)
这里有两个参数:
-
第一个参数:filename,规定要打开的文件。
-
第二个参数:mode,规定文件的访问类型。
r:只读方式打开,将文件指针指向文件头。
r+:读写方式打开,将文件指针指向文件头。
$file = fopen("test.txt","r");
echo $file;
<meta http-equiv="Content-Type" content="text/html;charset=gb2312"/>
fread()函数
fread(file,length)
函数包含两个参数,
-
第一个参数file规定要读取的打开文件。大家注意这里的file不是指文件名,而是指用fopen打开的文件句柄。
-
第二个参数length规定要读取的最大字节数。函数在读取完最多 length 个字节数,或到达 EOF 的时候结束。函数结束后返回所读取的字符串,如果出错返回 false。
只读取10个字符
<?php
$file = fopen("test.txt","r");
echo fread($file,"10");
fclose($file);
?>
<?php
$file = fopen("test.txt","r");
echo fread($file,filesize("test.txt"));
fclose($file);
?>
注意:
如果不先fopen,效果如下:
fclose()函数
作用:用完文件后把它们全部关闭是一个良好的编程习惯,这样可释放服务器资源。如果关闭成功则返回 true,否则返回 false。
示例:同上
按行读取–fgets()函数
fgets(file,length):从文件指针中读取一行。
test.txt中
<?php
$file = fopen("test.txt","r");
echo fgets($file);
fclose($file);
?>
判断是否到达文件尾函数–feof()
feof(file)
示例:利用这个函数逐行读取文件内容,一直读到文件尾为止。
<?php
$file = fopen("test.txt", "r");
//输出文本中所有的行,直到文件结束为止。
while(! feof($file)){
echo fgets($file). "<br />";
}
fclose($file);
?>
按字符读取–fgetc()函数
fgetc(file):可以从文件指针中读取一个字符。
读取一个字符
<?php
$file = fopen("test.txt","r");
echo fgetc($file);
fclose($file);
?>
循环读取字符
<?php
$file = fopen("test.txt","r");
while (! feof ($file)){
echo fgetc($file). "<br />";
}
fclose($file);
?>
文件创建与写入
文件创建–fopen()
可先后用w,w+,a,a+方式打开
w:写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
w+:读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
a:写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
a+:读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
w模式–覆盖模式写入
<?php
$myfile = fopen("newfile.txt", "w");
$txt = "Hello world! \n";
fwrite($myfile, $txt);
$txt = "write file test!\n";
fwrite($myfile, $txt);
fclose($myfile);
?>
a模式写入–追加模式写入
<?php
$myfile = fopen("newfile.txt", "a") or die("文件打开失败!");
$txt = "Hello world! \n";
fwrite($myfile, $txt);
fclose($myfile);
?>
刷新几次,追加写入几次
注:当fopen()打开文件失败时会执行or后面的die()函数,该函数首先参数内容,作为提示信息,如这里显示“文件打开失败! ”,然后终止程序的运行。
路径(文件夹)创建与删除
1.获得当前路径–getcwd()
<?php
echo getcwd();
?>
2.创建路径–mkdir(path)
path:路径名称字符串。如果创建成功,则返回 true,否则返回 false。
<?php
mkdir("testing");
?>
3.改变当前路径–chdir(path)
作用:进入创建的这个路径
<?php
// 获取当前目录
echo getcwd() . "<br>";
// 改变目录
chdir("testing");
// 获得当前目录
echo getcwd();
?>
C:\wamp\www\php\testing中testing是先前已有的,而不是新创的,只是进入了testing路径中
4.删除路径–rmdir(path)
<?php
$path = "testing";
rmdir($path);
?>
testing文件夹被删除
路径打开与读取
打开路径函数–opendir(path)
可以打开一个路径,以便下一步对该路径内容进行读取
$dir = "/images/";
$dh = opendir($dir)
关闭路径函数–closedir(dir_handle)
<?php
$dir = "/images/";
$dh = opendir($dir)
...
closedir($dh);
?>
读取路径–readdir(dir_handle)
$dir = "images";
$dh = opendir($dir);
// 打开目录,然后读取其内容
while (($file = readdir($dh)) !== false){
echo $file . "<br>";
}
closedir($dh);
此处读了至少两次,所以是两个小圆点。
文件信息封装到类中–dir(directory)
可以一次性把打开的路径的信息读取到一个类的实例中,就可以使用类的属性和方法进行操作,从而获得路径及文件的详细信息了。
<?php
$d = dir("images");
echo $d->path."<br>";
while (($file = $d->read()) !== false){
echo $file . "<br>";
}
$d->close();
?>
文件信息放到数组中–scandir(directory,sorting_order)
- 这里的参数directory必需的,规定要扫描的目录。
- 参数sorting_order可选,它规定排列顺序。默认是 0,表示按字母升序排列;如果设置为常量DIR_SORT_DESCENDING 或者 1,则表示按字母降序排列;如果设置为 SCANDIR_SORT_NONE,则返回未排列的结果。
$dir = "images";
// 以升序排序 - 默认
$a = scandir($dir);
// 以降序排序
$b = scandir($dir,1);
print_r($a);
print_r($b);
文件上传
<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">文件名称:</label>
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="上传" />
</form>
upload_file.php
<?php
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Stored in: " . $_FILES["file"]["tmp_name"];
}
?>
upload_file.php
解释:
- enctype="multipart/form-data
这里设置的是“multipart/form-data”, enctype 属性规定了在提交表单时要使用哪种内容类型。在表单需要提交二进制数据时,比如文件内容时,就需要使用 "multipart/form-data"这种设置。
- < input type=“file” name=“file” id=“file” / >
标签的 type=“file” 属性规定了应该把输入作为文件来处理。举例来说,当在浏览器中预览时,会看到输入框旁边有一个浏览按钮。通过它,用户可以在本地主机中选择一个文件。
-
通过使用 PHP 的超全局数组 $_FILES,可以获得上传文件的相关信息
-
$_FILES[“file”][“name”] - 被上传文件的名称
-
$_FILES[“file”][“type”] - 被上传文件的类型
-
$_FILES[“file”][“size”] - 被上传文件的大小,以字节计
-
$_FILES[“file”][“tmp_name”] - 存储在服务器的文件的临时副本的名称
-
$_FILES[“file”][“error”] - 由文件上传导致的错误代码
移动文件
move_uploaded_file(源文件,目标文件)
上传的文件内容在服务器的 PHP 临时文件夹创建了一个被上传文件的临时副本,这个临时的复制文件会在脚本结束时消失。要保存被上传的文件到指定路径,需要使用此函数
加上以下代码:
move_uploaded_file(
$_FILES["file"]["tmp_name"],
"images/" . $_FILES["file"]["name"]);
文件类型限制
对$_FILES[“file”][“type”]判断
示例:(对文件大小判断)
if($_FILES["file"]["size"] < 20000)
{
...
}
PHP cookie
经常会发现用户名已经自动填写在用户名填写框中了,也就是说上次登录的用户名,这就和WEB端的程序设置了cookie,有关系。
创建cookie
setcookie(name, value, expire, path, domain);
- name:必需。规定 cookie 的名称。
- value:必需。规定 cookie 的值。
- expire:可选,规定 cookie 的有效期。
- path:可选。规定 cookie 的服务器路径。
- domain 可选。规定 cookie 的域名。
<?php
$value = "my cookie value";
// 发送一个简单的 cookie
setcookie("TestCookie",$value);
?>
取回cookie
采用$_COOKIE这个超全局数组变量取回cookie的值
<?php
// 输出个别的 cookie
echo $_COOKIE["TestCookie"];
echo "<br />";
// 输出所有 cookie
print_r($_COOKIE);
?>
判断cookie是否存在
isset(var): 检测变量是否设置。
<?php
if (isset($_COOKIE["TestCookie"]))
echo "Welcome " . $_COOKIE["TestCookie"];
else
echo "Welcome guest!<br />";
?>
删除cookie
<?php
print_r($_COOKIE);
setcookie("TestCookie", "",time() - 3600);
?>
此时再打印,显示语法错误
PHP session
主要函数:session_start();
cookie是将数据保存在客户机上,而session是直接保存到服务器上。
创建session及取回
<?php
session_start();
//存储session变量
$_SESSION['views']=1;
echo $_SESSION['views'];
echo "<br />";
$_SESSION['user']="曹老师";
echo $_SESSION['user'];
echo "<br />";
print_r($_SESSION);
?>
删除session
<?php
print_r($_SESSION);
echo "<br />";
unset($_SESSION['views']);
echo $_SESSION['views'];
session_destroy();
print_r($_SESSION);
?>
unset():可以删除某个session
session_destroy():删除所有session,释放内存
其他
- 注意多维数组后面的; 不要忘记!