目录
- 基本语法
- 语句结构
- 函数
- 数组
- 面向对象的程序设计
- 字符串
- 正则表达式
- 常用函数
- 文件系统
- 图形图像处理
- MySQL数据库
- Cookie&Session
- 错误和异常
数组
概述
- PHP的弱类型性质,可以存储的内容是多种类型,不需要担心数据类型的问题。
- 数组的长度可以动态增长的。
- 数组的本质就是储存,管理和操作一组变量。数组储存的就是一系列变量值。
姓名 | 性别 | 年龄 | 公司 | 电子邮件 |
---|
Marshall | 男 | 20 | Abstergo | marshall@exp.com |
John | 女 | 22 | Bobo | john@exp.com |
<?php
$marshall_name='Marshall';
$marshall_sex='man';
$marshall_age=20;
$marshall_com='Abstergo';
...
?>
//不使用数组
<?php
$marshall_info=array('Marshall','man',20,'Abstergo','marshall@exp.com');
$john_info=array('John','woman',22,'Bobo','john@exp.com');
?>
//使用数组
索引数组
姓名 | 性别 | 年龄 | 公司 | 电子邮件 |
---|
Marshall | 男 | 20 | Abstergo | marshall@exp.com |
0 | 1 | 2 | 3 | 4 |
- 默认情况下索引是不需要定义的。
- 默认数组使用从0开始的数字依次递增来对应每个元素。
关联数组
姓名 | 性别 | 年龄 | 公司 | 电子邮件 |
---|
Marshall | 男 | 20 | Abstergo | marshall@exp.com |
name | sex | age | com | email |
- 索引不再是数字,可以使用有意义的字符串作为元素的索引
初始化数组
直接赋值初始化索引数组
$name [exp] = val
<?php
$marshall_info[0]='Marshall';
$marshall_info[1]='man';
$marshall_info[2]='20';
$marshall_info[3]='Abstergo';
$marshall_info[4]='marshall@exp.com';
?>
- 如果在直接赋值声明数组时不定义索引值,系统会默认从下标0开始依次递增
- 如果在声明的时候索引被指定了一个值,那么后面的元素下标会递增。
- 如果在声明的时候索引被定义了一个值,在递增过程中遇到了较小的下标,那么递增会跳过这个下表,在后面继续递增。
- 如果在声明的时候索引被定义了一个值,在递增过程中遇到了较大的下标,那么程序会以这个下标开始递增。
直接赋值初始化关联数组
$name [exp] = val
<?php
$marshall_info[name]='Marshall';
$marshall_info[sex]='man';
$marshall_info[age]='20';
$marshall_info[com]='Abstergo';
$marshall_info[email]='marshall@exp.com';
?>
- 如果在声明时不给下标指定一个值,那么系统就会从下标0开始,并且递增。
使用array()初始化数组
$name=array($key=>$value,$key2=>$value2,$key3=>$value3,...)
$name=array($value,$value2,$value3,...)
<?php
$marshall_info=array('name'=>'Marshall',
'sex'=>'man',
'age'=>20,
'com'=>'Abstergo',
'email'=>'marshall@exp.com');
print_r($marshall_info);
?>
数组的类型
一维数组
$arr_name=array(value1,value2,...)
$arr_name[$key]
<?php
$marshall_info=array('name'=>'Marshall',
'sex'=>'man',
'age'=>20,
'com'=>'Abstergo',
'email'=>'marshall@exp.com');
print_r($marshall_info);
echo '姓名:'.$marshall_info['name'].'<br/>';
echo '性别:'.$marshall_info['sex'].'<br/>';
echo '年龄:'.$marshall_info['age'].'<br/>';
echo '公司:'.$marshall_info['com'].'<br/>';
echo '邮箱:'.$marshall_info['email'];
$k='name';
echo '姓名:'.$marshall_info[$k].'<br/>';
$k='sex';
echo '性别:'.$marshall_info[$k].'<br/>';
$k='age';
echo '年龄:'.$marshall_info[$k].'<br/>';
$k='com';
echo '公司:'.$marshall_info[$k].'<br/>';
$k='email';
echo '邮箱:'.$marshall_info[$k];
?>
多维数组
<?php
$arr=array(array(1,2,3),array(4,5,6),array(7,8,9));
print_r($arr);
echo $arr[2][2];
?>
$arr=array('ONE'=>array('one'=>1,'two'=>2,'three'=>3),
'TWO'=>array('one'=>4,'two'=>5,'three'=>6),
'THREE'=>array('one'=>7,'two'=>8,'three'=>9));
数组的遍历
for,for-each循环遍历数组
1.for循环
<?php
$arr=array(1,2,3,4,5,6);
echo '$arr数组中元素的值如下:';
for($i=0;$i<6;$i++)
{
echo '<br/>'.$arr[$i];
}
?>
count ($var,$mode)
<?php
$arr=array(array(1,2,3),array(4,5,6),array(7,8,9));
echo '$arr数组中所有元素的值如下:';
for($x=0;$x<count($arr);$x++)
{
for($y=0;$y<count($arr[$x]);$y++)
{
if($arr[$x][$y])
{
echo '<br/>'.$arr[$x][$y];
}
else
{
echo '<br/>'.$arr[$x];
}
}
}
?>
2.for-each循环
foreach (array_name as $value)
foreach (array_name as $key=>$value)
<?php
$arr=array(1,2,3,4,5,6,7,8,9);
foreach($arr as $k=>$v)
{
echo "数组中的第".$k."元素是:".$v.'<br/>';
}
?>
<?php
$arr=array(1,2,3,4,5,6,7,8,9);
foreach($arr as &$v)
{
$v*=2;
}
foreach($arr as $k=>$v)
{
echo "数组中的第".$k."元素是:".$v.'<br/>';
}
?>
each( ),list( )和while循环便利数组
each函数
- 接受一个数组变量名参数,返回数组中当前指针位置的键值对并向后移动数组指针
- 键值对被返回为4个元素的数组,键名为0,1,key和value。
- 元素0和key包含有数组元素的键名,1和value包含有数据。
- 如果内部指针超越了数组的末端,则返回FALSE.
<?php
$arr=array('name'=>'Marshall','age'=>20);
print_r(each($arr));
echo '<br/>';
print_r(each($arr));
echo '<br/>';
var_dump(each($arr));
?>
list函数
- 把数组中的值赋给一些变量。
- 使用一次操作,给多个变量赋值。
- list内参数和数组内元素是一一对应的。
- list内参数个数小于数组内元素个数,则程序会把数组内对应个数的元素赋值给函数参数。
- list内参数个数大于数组内元素个数,则程序会发出警告。
<?php
$arr=array('A','B','C','D');
list($a,$b,$c,$d)=$arr;
echo "\$a=$a,\$b=$b,\$c=$c,\$d=$d";
list($e,$f)=$arr;
echo "\$e=$e,\$f=$f";
?>
<?php
$arr=array('one'=>'A','two'=>'B','three'=>'C');
list($k,$v)=each($arr);
echo "$k=>$v<br/>";
list($k,$v)=each($arr);
echo "$k=>$v<br/>";
list($k,$v)=each($arr);
echo "$k=>$v<br/>";
?>
while循环和each( )函数联合使用遍历数组
<?php
$arr=array('one'=>'A','two'=>'B','three'=>'C','four'=>'D');
while($n=each($arr))
{
echo $n['key'].'=>'.$n['value'].'<br/>';
echo $n[0].'=>'.$n[1].'<br/>';
}
?>
while循环和each( ),list( )联合遍历数组
<?php
$arr=array('one'=>'A','two'=>'B','three'=>'C','four'=>'D');
while(list($x,$y)=each($arr))
{
echo "$x=>$y<br/>";
}
?>
数组内部指针控制函数
- 数组的内部指针是数组的组织机构,它可以指向数组中任意一个元素。
- 默认指向数组的第一个元素。
- 通过控制指针的移动,可以访问到数组中的任意一个元素。
函数名 | 说明 |
---|
current() | 返回当前元素的内容。并不移动指针。超出元素列表末端则返回FALSE。 |
key() | 返回当前元素的索引值 |
next() | 返回数组内部指针指向的下一个元素的内容,没有时则返回FALSE。元素的值为空或者为0也会返回FALSE。 |
prev() | 返回数组内部指针指向的前一个元素的内容,没有时则返回FALSE。元素的值为空或者为0也会返回FALSE。 |
end() | 将数组的内部指针移动到最后一个元素并返回其值 |
reset() | 将数组的内部指针倒回到第一个元素并返回其值,数组为空则返回FALSE。 |
<?php
$arr=array('one'=>'A','two'=>'B','three'=>'C','four'=>'D');
echo 'current()=>'.current($arr).'<br/>';
echo 'key()=>'.key($arr).'<br/>';
echo 'next()=>'.next($arr).'<br/>';
echo 'prev()=>'.prev($arr).'<br/>';
echo 'end()=>'.end($arr).'<br/>';
echo 'reset()=>'.reset($arr);
?>
PHP预定义数组
- 在全局范围内自动生效。
- 包含了来自Web服务器,客户端,运行环境和用户输入等数据。
预定义数组名 | 说明 |
---|
$GLOBALS | 包含了全局变量的全局组合数组。变量的名称就是数组的键。 |
$_SERVER | 包含了诸如头信息,路径及脚本位置等信息的数组。 |
$_GET | 通过URL参数传递给当前脚本的变量的数组。 |
$_POST | 通过HTTP POST方法传递给当前脚本的变量的数组。 |
$_REQUEST | 默认情况下包含了GET,POST,COOKIE的数组。 |
$_FILES | 通过HTTP POST方法上传到当前脚本的项目的数组。 |
$_SESSION | 当前脚本可用SESSION变量的数组。 |
$_COOKIE | 通过HTTP COOKIE方法传递给当前脚本的变量的数组。 |
$_ENV | 通过环境方式传递给当前脚本的变量的数组。 |
相关处理函数
1.array_sum()
<?php
$arr=array(1,2,3,4,5,6,7,8,9);
echo '$arr数组中所有值的和是:'.array_sum($arr);
$arr=array(1,2,3,a,b,c,4);
echo '$arr数组中所有值的和是:'.array_sum($arr);
?>
2.in_array()
<?php
$arr=array(1,2,3,a,b,c,4);
if(in_array('a',$arr))
{
echo '找到了你要找的值。';
}
else
{
echo '没有找到你要找的值。';
}
?>
3.array_count_valuse()
<?php
$arr=array(11,2,31,11,2,6,39,2,2);
print_r(array_count_values($arr));
$c=array_count_values($arr);
echo '<br/>';
echo '数组$arr中数值2出现了'.$c[2].'次。<br/>';
echo '数组$arr中数值11出现了'.$c[11].'次。<br/>';
echo '数组$arr中数值31出现了'.$c[31].'次。<br/>';
?>