数组
定义:数组是键值对的集合
注意:
(1)键值对必须成对出现
(2)一个数组中不能出现重复的下标,如果出现了,那么后面的将会覆盖前面的
(3)值可以为一个数组
(4)下标可以为数字或字符串
(1)一维数组
声明数组:
$arr = array('key1'=>$value1,'key2'=>$value2....);
$arr = array($v1,$v2,$v3....);//这里把键省略了,系统会分配默认的键
分配规则:已使用的最大的整型键+1,如果没有则从0开始;
Demo:
$arr = array(1,2,3,4,5); // ==> 索引数组
$arr = array('color1'=>red,'color2'=>blue); // ==> 以字符串为下标的称为关联数组
(2)二维数组
定义:数组的值又为一个一维数组
$arr = array('colors' => array('red','blue',green),'sizes' => array(1,3,4,5,7));
(3)foreach循环
语法:
foreach($arr as $key => $val){
}
//Demo:
$arr = array(1,4,7,3,7);
foreach($arr as $key => $val){
echo $key.' = '.$val.'<br/>';
}
基本函数库
(1)数学函数
绝对值: abs($number) 返回非负数
四舍五入: round($floatnum[,$num]) 返回浮点数,后面的参数为可选,表示保留几位小数,当为负数时表示往小数点前取位,默认取整
向上取整: ceil() 返回浮点数,如ceil(3.13) 结果为4
向下取整: floor($number) 返回浮点数,如floor(3.93) 结果为3
取平方根: sqrt($float) 返回浮点数
幂: pow($number,$exp) 返回数值型,两个参数都为数值型
最大值: max($num1,$num2...$numX) 返回最大的那个数
最小值: min($num1,$num2...$numX) 返回最小的那个数
取随机数: rand([$min,$max]) 参数为可选
mt_rand([$min,$max]) 精度要高于rand(),即重复的机率要远低于rand()
(2)时间函数
time(); 返回当前时间戳
date('Y-m-d H:i:s'[,time()]); 当前时间日期格式
时间格式:
y 两位数年份, Y 四位数年份
m 两位数月份, n 一位数月份, M 英文月份的前三位, F 英文月份全写
d 两位数日期, j 一位数日期
w 星期中的第几天 0-6,D 星期的英文前三个字母,N 星期中的第几天 1-7 ,W 一年中的第几周
h 小时00-11,*H 小时00-23,g 小时1-12,G 小时0-23
i 分钟 00-59
s 秒 00-59
a am或pm,A AM或PM
microtime() 获取当前时间,微秒级,样式: 0.98903200 1337159287,多用于测试程序运行时间,或取随机数
date_default_timezone_set("PRC") 设置时间的函数
date_default_timezone_get() 获取当前设置的时区
strtotime('$timestring') 把时间格式的字符串转换成时间戳
Demo:
echo strtotime('2012-01-01'); //不写时间则默认为00:00:00
也可以直接使用days、weeks、months、years对时间描述直接使用
Demo:
echo strtotime("-1 days");//输出前一天的时间
echo strtotime("+1 week 2 days 4 hours 2 seconds");
今日作业:
//判断一个年份是否是闰年
echo '(1)判断一个年份是否为闰年<br/>';
$n = 400;
if(($n%4==0 && $n%100!=0) || $n%400 == 0 ){
echo $n.'年是闰年';
} else {
echo $n.'年不是闰年';
}
//写出至少三种获取文件扩展名的方法
$file = 'test.html';
echo '<br/>(2)获取文件后缀名的三种方法<br/>名件名:'.$file.'<br/>第一种方法:<br/>';
$file1 = pathinfo($file);
echo $file1['extension'].'<br/>';
echo '第二种方法:<br/>';
$file2 = explode('.',$file);
echo end($file2).'<br/>';
echo '第三种方法:<br/>';
$file3 = strrpos($file,'.');
echo substr($file,$file3+1).'<br/>';
//打鱼还是晒网
echo '(3)中国有句俗语叫“三天打鱼两天晒网”。某人从1990年1月1日起开始“三天打鱼两天晒网”,
问这个人在2012年4月9日是在“打鱼“,还是在”晒网”。<br/>';
$start = strtotime('1990-1-1');
$end = strtotime('2012-4-9');
$times = ceil(($end-$start)/(3600*24));
if($times%5>3 || $times%5 == 0){
echo '他正在晒网';
} else {
echo '他正在打鱼';
}
//使用循环输出一个5X4的表格
echo '<br/>(4)使用循环输出一个5X4的表格<br/>';
echo '<table cellpadding="0" cellspacing="0" border=1>';
for($i=1;$i<=4;$i++){
echo '<tr>';
for($j=1;$j<=5;$j++){
echo '<td width="80" height="30"> </td>';
}
echo '</tr>';
}
echo '</table>';
//输出100以内(不含100)以被3整除的整数
echo '<br/>(5)输出100以内(不含100)以被3整除的整数<br/>';
for($i=1;$i<100;$i++){
if($i%3==0){
echo $i.' ';
}
}
//输出100以内(不含100)以被3整除且个位数为6的整数
echo '<br/>(6)输出100以内(不含100)以被3整除且个位数为6的整数<br/>';
for($i=1;$i<100;$i++){
if($i%3==0 && substr($i,-1)==6){
echo $i.' ';
}
}
//输出1~100之间的偶数(5个数字作为一行输出)
echo '<br/>(7)输出1~100之间的偶数(5个数字作为一行输出)<br/>';
$k=0;
for($i=1;$i<=100;$i++){
if($i%2==0){
echo $i.' ';
$k++;
}
if($k==5){
$k=0;
echo '<br/>';
}
}
//字符串$str="abcdabcarray";打印出所有字母a的位置
echo '<br/>(8)字符串$str="abcdabcarray";打印出所有字母a的位置。<br/>';
$str = 'abcdabcarray';
$len = strlen($str);
for($i=0;$i<$len;$i++){
if($str{$i} == 'a'){
echo '第'.++$i.'个是a ';
}
}
//$a=5;$b=3;$c=9;请写程序排序三个数,不能使用系统函数
echo '<br/>(9)$a=5;$b=3;$c=9;请写程序排序三个数,不能使用系统函数。<br/>';
$arr = array(5,3,9);
$count = count($arr);
for($i=1;$i<$count;$i++){
$insval = $arr[$i];
$insindex = $i-1;
while($insindex>=0 && $insval < $arr[$insindex]){
$arr[$insindex+1]=$arr[$insindex];
$insindex--;
}
$arr[$insindex+1]=$insval;
}
print_r($arr);
字符串函数
注:字符串有一个索引下标,如$str = “abcd”
a-d从左至右的下标依次为0,1,2,3;可以用$str[0]或$str{0}输出a
int strlen($string)
获取字符串长度,返回int型
mix strpos($string,$find[,$start])
获取某字符串在另一个字符串中第一次出现的位置,
返回下标值,如果不存在则返回false
$start可选,为开始查找的位置//pos为position的简写
判断某字符串是否包含在另一字符串中时需用全等===flase来判断,因为第一个下标值是0
mix strrpos($string,$find[,$start])
返回某字符串在另一字符串中最后一次出现的位置
注:另有stripos、strripos与上面两个一样,只是不区分大小写
int iconv_strrpos($string,$find[,$encode])
统计$find在$string中最后出现的位置,指定编码后可用于查找中文
mix strstr($string,$findstr)
查找某字符串是否在另一字符串中,
如果不存在则返回false,区分大小写,别名strchr
如果存在,返回查找到的字符串开始至被查找的字符串结束
Demo:
$str = 'abcfdfgdgs';
var_dump(strstr($str,'dfg'));
mix stristr($string,$findstr)
与strstr相同,但是不区分大小写
mix strrchr($string,$findstr)
与strstr相同,但是返回的是查找到的最后一个结果
Demo:
$str = 'abcfdabcgs';
var_dump(strstr($str,'abc'));//output abcgs
str substr($string,$start[,$length])
截取字符串的一部分,
$length不写时,截取从开始位置至字符串结束
$start为负数时,为从后往前数第n位
$length为负数时,$length为截取结束的位置
Demo:
$str = 'abcfdfgdgs';
echo substr($str,-4,-2);//output gd
bool iconv(in_code,out_code,$string)
把$string从in_code编码转成out_code编码
int mb_strlen($string[,$encode])
使用$encode时返回字符串的字符数,同iconv_strlen一样
str mb_substr($string,$start[,$length[,$encode]])
类似substr,截取字符串,同iconv_substr一样
使用第四个param声明字符集时,$start与$length都以字符数计算
而不以字节数计算,这样就可以实现汉字截取不会乱码
str mb_strcut($string,$start[,$length[,$encode]])
与mb_substr一样,但是是以字节数计算的
注:mb_ 开头的函数需开启php.ini中 extension=php_mbstring.dll
/*
* 使用gbk编码截取字符串使之能与英文字母对齐
* 返回utf8编码字符串
*/
function iconvstr($string,$length){
return @iconv("gbk","utf-8",mb_strcut(iconv("utf-8","gbk",$string),0,$length));
}
str strrev($string)
把字符串反转
Demo: echo strrev('abc'); //output cba
//不用strrev实现字符串反转
$str = 'abcdef';
$len = strlen($str);
$newstr = '';
for($i=$len-1;$i>=0;$i--){
$newstr .= $str[$i];
}
echo $newstr.'<br/>';
str str_replace($find,$replace,$string[,$count])
查找并替换字符串,区分大小写
PHP5.0以上可以使用$count来统计替换的次数,$count变量为自定义
$find可以为数组,如果为数组将查找字符串中每一个存在的值并替换成$replace
Demo:
$vowels = array("a", "e", "i", "o", "u", "A", "E", "I", "O", "U");
$onlyconsonants = str_replace($vowels, "", "Hello World of PHP");
//output Hll Wrld f PHP
$find与$replace可以同时为数组,那么将查找$find中的值,并替换成$replace中对应下标的值
Demo:
$phrase = "You should eat fruits, vegetables, and fiber every day.";
$healthy = array("fruits", "vegetables", "fiber");
$yummy = array("pizza", "beer", "ice cream");
$newphrase = str_replace($healthy, $yummy, $phrase);
//output You should eat pizza, beer, and ice cream every day
str str_ireplace($find,$replace,$string)
与str_replace一样,不区分大小写
str strtr($string,$find,$replace)
查找字符串$string中的$find的每一个字符, 并替换成$replace对应的字符
Demo:
echo strtr('hilla warld','ia','eo'); //output hello world
str strtr($string,array(“find1”=>$value1,“find2”=>$value2 。。。))
将字符串$string中的find替换成对应的value
arr explode($delimiter,$string[,$limit])
以$delimiter为分隔符将字符串分隔成数组
$limit为当分隔$limit个后不再继续分隔,后面的全归最后一个
Demo:
$str = 'a,b,c,d';
print_r(explode(',',$str,2));
//output array('a','b,c,d')
str implode($delimiter,$array)
把数组以$delimiter为连接符转换为字符串,别名join()
Demo:
$str = 'a,b,c,d';
$newstr = explode(',',$str);
var_dump(implode('#',$newstr));
str strtoupper($string)
将$string中的小写字母全部转换成大写字母
str strtolower($string)
将$string中的大写字母全部转换成小写字母
str ucwords($string)
将所有的单词首字母大写
str ucfirst($string)
把字符串的首字母大写
str trim($string[, string $charlist ])
去除字符串的首尾空格(或其它字符)
如果不指定第二个参数,trim() 将去除这些字符:
" " (ASCII 32 (0x20)),普通空格符。 "\t" (ASCII 9 (0x09)),制表符。 "\n" (ASCII 10 (0x0A)),换行符。 "\r" (ASCII 13 (0x0D)),回车符。 "\0" (ASCII 0 (0x00)),空字节符。 "\x0B" (ASCII 11 (0x0B)),垂直制表符。
$hello = "Hello World";
$trimmed = trim($hello, "Hdle");
var_dump($trimmed); //output string(5) "o Wor"
str ltrim($string[, string $charlist ])
去除字符串左边的空格(或其它字符)
str rtrim($string[, string $charlist ])
去除字符串右边的空格(或其它字符)
str addslashes($string)
给$string添加转义(单、双引号,转义符本身)
str stripslashes($string)
给$string删除转义
int get_magic_quotes_gpc();
获取当前自动转义的设置返回0或1
str ini_get($config_name)
获取php.ini中的配置项,成功时返回获取的值,失败返回false
str ini_set($config_name,$new_value)
设置php.ini中的配置项,成功则返回旧值,失败返回false
str htmlspecialchars($string[,$flags])
将特殊字符如(< > & ")转换为 (&lgt; > & ")
使用第二个参数ENT_QUOTES时,会同时转换单引号
使用第二个参数ENT_NOQUOTES时,不对单双引号转换
str htmlspecialchars_decode($string[,$flags])
把实体字符转换为特殊字符,第二参数同上
bool is_string($string)
判断$string是否为字符串,返回boolean值
str str_shuffle($string)
将字符串重组成一个随机顺序的字符串
str str_repeat($string,$n)
重复一个字符串$n次
int substr_count($string,$find[,$start[,$length]])
统计$find在$string中出现的次数,可指定区域
arr str_split($string[,$length])
将字符串转换成数组,默认$length=1为1个字符串转换一个数组的值
int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )
执行一次正则匹配,结果返回给数组$matches,函数返回0(未匹配上)或1(匹配上)
int preg_match_all ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )
执行一个全局的正则匹配,结果返回给数组$matches,函数返回0(未匹配上)或匹配上的次数
arr preg_split ( string $pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]] )
根据正则来分隔字符串,返回数组,未匹配上返回空数组
Demo:
print_r(preg_split('/(?<!^)(?!$)/u', '达内科技' ));
//output array('达','内','科','技');
str htmlentities($string[,ENT_QUOTES])
//替换所有实体标签,加ENT_QUOTES 则同时替换单双引号
数组函数
arr sort($array)
值正序排列,会破坏原有的下标,强制转换成新的索引下标
arr asort($array)
值正序排列,保留原有键值对关系对数组进行重新排列
arr arsort($array)
值倒序排列,保留原有键值对关系对数组进行重新排列
arr ksort($array)
下标正序排列,保留原有键值对关系对数组进行重新排列
arr krsort($array)
下标倒序排列,保留原有键值对关系对数组进行重新排列
int count($array)
返回数组的长度,如果参数$arr不是数组,参数非null则返回 1
mix array_search($findval,$array)
查找数组中是否某个值并返回下标,不存在则返回false
可以查找多维数组中的值(数组)
如果用于判断是否存在,须用 === false,如strpos一样
bool in_array($findval,$array)
查找数组中是否存在某个值,与上面一样可以查找多维数组中的数组,返回true或false
bool array_key_exists($findkey,$array)
查询数组中是否存在某个下标,返回true或false
bool isset($variable)
判断变量是否存在,可以用来判断$array[$key]是否存在
bool empty($variable)
判断变量的值是否为空(false)
arr array_reverse($array)
反转数组,返回反转后的新数组,
原有的关联下标关联关系不变,其它的重新建立索引
Demo:
$arr = array('a'=>'test','100'=>1,2,3,'d',array(1,2));
var_dump(array_reverse($arr));
//output array(array(1,2),'d',3,2,1,'a'=>'test');
arr array_merge($array1,$array2。。。)
合并多个数组,如果下标重复了,
索引下标会自动重新分配下标,关联下标会用后面的值覆盖前面的值
Demo:
$arr1 = array(1,2,3,'d'=>'ddd');
$arr2 = array(5,6,3,'d'=>'eee');
print_r(array_merge($arr1,$arr2));
//output Array( [0] => 1 [1] => 2 [2] => 3 [d] => eee [3] => 5 [4] => 6 [5] => 3)
arr array_keys($array)
获取所有下标并将下标组成新的数组
返回由原数组的下标组成的新数组,建立索引下标
arr array_values($array)
返回由原数组的值组成的新数组,建立索引下标
int array_push($array,$value1,$value2。。。)
从尾部给$array追加值,返回新数组的长度值
$value可以有任意多个,可以为数组类型
int array_unshift($array,$value1,$value2。。。)
从前面给$array增加值,返回新数组的长度值
$value可以有任意多个 并可以再为数组类型
str array_pop($array)
删除数组$array的最后一个元素,返回被删除的那个值
str array_shift($array)
删除数组的第一个元素,返回被删除的那个值
bool unset($var1[,$var2,$arr[3]。。。])
删除变量,参数可以为一个或多个,unset和echo一样是语句没有返回值,
这里可以为数组或数组的某个键值对等任意类型
$variable = NULL; 同样也是将变量置空
str end($array)
数组指针指向最后,并返回数组最一个元素的值
str reset($array)
数组指针指向最前,并返回数组最第一个元素的值
mix prev($array)
数组指针左移一位,并返回左边一个元素的值,指针超出则返回false
mix next($array)
数组指针右移一位,并返回右边一个元素的值,指针超出则返回false
mix current($array)
返回数组指针当前指向的值
注:如果数组包含有空单元(0 或者 "",空字符串),
则使用prev、next、current在碰到这个单元时也返回 FALSE。
$transport = array('foot', 'bike', 'car', 'plane');
$mode = current($transport); // $mode = 'foot';
$mode = next($transport); // $mode = 'bike';
$mode = next($transport); // $mode = 'car';
$mode = prev($transport); // $mode = 'bike';
$mode = end($transport); // $mode = 'plane'
arr each($array)
返回数组中当前指针的键值对,并将指针右移一位,
如果指超出则返回false,键值对被返回为四个单元的数组,
键名为 0,1,key 和 value。单元 0 和 key 包含有数组单元的键名,1 和 value 包含有数据。
arr list($var1,$var2。。。) = array($v1,$v2。。。)
把数组中的索引下标的值依次赋给list中对应的变量,
list中变量的数量可以小于数组的长度,但不能大于数组的长度,返回的值为原数组
Demo:
$arr = array('a'=>1,2,3,4,5);
list($a,,$b) = $arr;
echo $a.'---'.$b;//output 2---4
注:each()经常与list()结合来遍历数组
<?php
$fruit = array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');
reset ($fruit);
while (list ($key, $val) = each ($fruit)) {
echo "$key => $val\n";
}
/* Outputs:
a => apple
b => banana
c => cranberry
*/
bool is_array($array)
判断变量是否为数组,返回true或false
bool shuffle($array)
对数组进行随机排序,原有的下标不会保留,返回boolean
arr array_unique($array)
去除数组中的重复的值,返回新数组,原数组不变化
Demo:
$arr = array(1,'a'=>1,'b'=>2,2);
print_r(array_unique($arr));
//output array(1,'b'=>2)
mix array_rand($array[,$num])
从数组中随机取出一个或多个元素,默认为1个,
如果1个则返回随机抽取的那个下标,多个则返回随机抽取的下标组成的数组
arr array_slice($array,$start[,$length])
截取数组的一部分,返回新数组,原数组不变,类似substr
arr array_splice($array,$start[,$length[,$insert]])
删除数组的一部分,返回由被删除的部分组成的新数组,
原数组被修改成删除+替换后的新数组
不指定$length则删到最后,$length=0则不删除数组的值
使用$insert 在$start部分插入新的值[$insert可以为字符串或数组]
$arr = array(1,2,3,4);
$new = array_rand($arr,1);
//$new 的值为0-3随机一个
$arr = array(1,2,3,4);
$new = array_rand($arr,2);
//$new 为长度2的数组,值为0-3随机,值不重复
$arr = array(1,2,3,4);
$new = array_slice($arr,1,-1);
//$new is array(2,3);
$input = array ("red", "green", "blue", "yellow");
array_splice ($input, 2);
// $input is now array ("red", "green")
$input = array ("red", "green", "blue", "yellow");
array_splice ($input, 1, -1);
// $input is now array ("red", "yellow")
$input = array ("red", "green", "blue", "yellow");
array_splice ($input, 1, count($input), "orange");
// $input is now array ("red", "orange")
$input = array ("red", "green", "blue", "yellow");
array_splice ($input, -1, 1, array("black", "maroon"));
// $input is now array ("red", "green",
// "blue", "black", "maroon")
$input = array ("red", "green", "blue", "yellow");
array_splice ($input, 3, 0, "purple");
// $input is now array ("red", "green",
// "blue", "purple", "yellow");
str serialize($array)
把数组序列化成字符串
arr unserialize($array)
把被系列化的数组反系列化加数组
arr array_change_key_case($array[,$mode])
把数组中的下标都转换成大写或小写,返回新数组,
$mode的值可以为CASE_UPPER或者CASE_LOWER,
$mode默认为CASE_LOWER,如果转换后有重复下标,则后面的会覆盖前面的