空数组
$arr=array(); var_dump($arr);
gettype():得到变量的类型
echo gettype($arr);//array(0) {}
通过is_array():检测变量是否为数组
var_dump(is_array($arr));arraybool(true)
如果数组下标重复,后面的覆盖前面的值
( 'a',0=>'b' ); $arr); array(1) { //[0]=> // string(1) "b" //}
如果新添加元素没有指定下标,它的下标为已有下标最大值加1(已有下标不全为负数)
( 'a','b','c',5=>'d',19=>'e','f'var_dump($arr); //array(6) { // [0]=> // string(1) "a" // [1]=> // string(1) "b" // [2]=> // string(1) "c" // [5]=> // string(1) "d" // [19]=> // string(1) "e" // [20]=> // string(1) "f" //}
如果已有下标都为负数,那么新添加元素的下标从0开始
( -12=>'a',-43=>'b','c'array(3) { // [-12]=> // string(1) "a" // [-43]=> // string(1) "b" // [0]=> // string(1) "c" //}
动态创建下标连续的索引数组
$arr1[]=12; $arr1[]=45678.9$arr1[]=true; print_r($arr1Array //( // [0] => 12 // [1] => 45678.9 // [2] => 1 //)
快速创建下标连续的索引数组
range(1,10Array //( // [0] => 1 // [1] => 2 // [2] => 3 // [3] => 4 // [4] => 5 // [5] => 6 // [6] => 7 // [7] => 8 // [8] => 9 // [9] => 10 //)
手动指定步长的数组
Array //( // [0] => 1 // [1] => 3 // [2] => 5 // [3] => 7 // [4] => 9 //) range('a','z');97~122 $arr);
通过compact创建数组的时候,只能写已经存在的变量的名称,不需要加$
$a=12$b=false$c=null$userInfo3=compact('a',1)">$userInfo3Array //( // [a] => 12 // [b] => // [c] => //)
定义常量数组
const在5.6之后可以定义常量
const ARR2=[ 'a'=>'aa','b'=>'bb' ]; print_r(ARR2);
通过define()定义常量数组
define('CUSTOM_UPLOAD_ERRORS',[ 'ext_error'=>'上传文件扩展名不符合规范','maxsize_error'=>'上传文件大小不符合规范' ]); print_r(CUSTOM_UPLOAD_ERRORS); echo CUSTOM_UPLOAD_ERRORS['ext_error'];
删除指定元素unset
$arr=['a',1)">]; unset($arr[0]); Array //( // [1] => b // [2] => c //)
临时转换成数组
$var=null;null转化成空数组 $res=(array)$var$resarray(0) { }
永久转换成数组,settype($var,$type)
$var=123settype($var,'array'array(1) { [0]=> int(123) }
合并数组
如果数组键名相同,只会使用左边数组元素的值
$arr1=['a',1)">]; $arr2=['d','e',1)">$newArr=$arr1+$arr2$newArrArray //( // [0] => a // [1] => b //[2] => c //)
== 比较数组的键名和键值是否相同,如果相同返回true,否则返回false
=== 既要比较键名和键值是否相同,而且顺序也要相同
$a=[ 3=>'a','5'=> ]; [ 5=>1,'3'=>'a'[ '3'=>'a','5'=>1$a==$b,$a===$c,1)">$c);true false true false
数组运用
通过foreach遍历数组
[ 5=>'a',12=>'b',-123=>'c',34=>'d' ]; foreach($arr as $v){ echo $v,"\n";a b c d } $k=>$k,'--',"\n" 5--a // 12--b // -123--c // 34--d }
可以通过:和endforeach代替{}
$val): $valendforeach;
foreach不再改变内部数组指针
$arr=[0,1,1)">as &){ current()); }
foreach 通过值遍历时,操作的值为数组的副本
$ref=&老版本会跳过1 $val,'<br/>';0 1 2 $arr[1]); } $arr,1)">$refarray(2) { // [0]=> // int(0) // [2]=> // int(2) //} //array(2) { // [0]=> // int(0) // [2]=> // int(2) //}
foreach通过引用遍历时,有更好的迭代特性
按照引用进行循环的时候,对数组的修改会影响循环
$arr=['a'a b $arr[1]='b'; }
数组指针相关函数
key($array):得到当前指针所在位置的键名,如果不存在返回null
current($array):得到当前指针所在位置的键值,如果不存在返回false
next($array):将数组指针向下移动一位,并且返回当前指针所在位置的键值;如果没有,返回false
prev($array):将数组指针向上移动一位,并且返回当前指针所在位置的键值;如果没有,返回false
reset($array):将数组指针移动到数组开始,并且返回当前指针所在位置的键值;如果没有,返回false
end($array):将数组指针移动到数组的末尾,并且返回当前指针所在位置的键值;如果没有,返回false
[ 'a',35=>'test','username'=>'king','age'=>12/* Array ( [0] => a [1] => b [2] => c [35] => test [username] => king [age] => 12 ) */ echo '当前指针所在位置元素的键名为:',1)">key(0 echo '当前指针所在位置元素的键值为:',1)">a next(b 1 b $arr)";//c echo '当前指针所在位置元素的键名为:',key();//2 echo '当前指针所在位置元素的键值为:',current($arr),1)">;//c echo prev();//b echo '当前指针所在位置元素的键名为:',1)">);//1 echo '当前指针所在位置元素的键值为:',1)">);//b echo end();//12 echo '当前指针所在位置元素的键名为:',1)">);//age echo '当前指针所在位置元素的键值为:',1)">);//12 var_dump(next());//bool(false) NULL bool(false) echo reset();//a echo '当前指针所在位置元素的键名为:',1)">);//0 echo '当前指针所在位置元素的键值为:',1)">$arr);//a
循环全部输出
[ 'a',''=>'aaa'while(!is_null())){ echo '当前指针所在位置的键名为:',1)">; echo '当前指针所在位置的键值为:',1)">echo "\n"); }
获得扩展名
$filename='1.txt.PHP.html'$res=explode('.',1)">$filename); $ext=end($res);指针移动到最后 $ext;
list():将下标连续的从0开始的索引数组赋值给相应的变量
]; list($var1,1)">$var2,1)">$var3)=; $var3;a b c
遍历二维数组
[ [1,'king1',12],1)"> [2,'king2',22],1)"> [3,'king3',32] ]; as $id,1)">$username,1)">$age)){ $age,1)">; } 1-king1-12 //2-king2-22 //3-king3-32
each($array):得到当前指针所在位置的键值对,返回的是数组,包含4个部分;并且将指针向下移动一位
[ 'a'=>'aaaa','b'=>'bbbb' ]; each(); Array //( // [1] => aaaa // [value] => aaaa //[0] => a //[key] => a //)
输出当前指针位置的键值
a-aaaa
循环数组
while($v)=)){ ; } a--aaaa //b--bbbb
数组中所有键名组成字符串
$userInfo=[ 'username'=>'king','password'=>'123456','email'=>'382771946@qq.com'$keys=join(',',1)">array_keys($userInfo)); $keys);username,password,email //数组中所有键值转为字符串 $vals="'".join("','",1)">array_values($userInfo))."'"$vals);'king','123456','382771946@qq.com' //拼接成sql语句: INSERT user(username,email) VALUES('king','382771946@qq.com') $sql="INSERT user({$keys}) VALUES({$vals})"$sql;INSERT user(username,'382771946@qq.com')
in_array()
$allowExts=['jpg','jpeg','png','gif'$ext='jpg'in_array($ext,1)">$allowExts));bool(true)
字符串转数组并乱序
$string='速,度,快,放,假,了'explode(',1)">$stringshuffle(); 将键名与键值反转 array_flip(返回包含随机键名的数组 4个值 array_rand($res);
字符串转数组,求和
$sum='10,20,30'array_sum($sum));60
计算并返回数组的乘积
echo array_product(6000
截取文件扩展名,并且检测扩展名是否在['jpg','gif','png']
$filename='1.txt.PHP.jpg'$ext;jpg bool(true)
array_push():在最后追加数据
array_pop():删除最后一个,并返回
array_unshift():在前面追加数据
array_shift():删除第一个,并返回
array_pop($res;c Array //( // [0] => a // [1] => b //) array_push(Array //( // [0] => a // [1] => b //[2] => c //[3] => hello world //[4] => 123 //) array_shift(Array //( // [0] => b // [1] => c //) array_unshift(Array //( // [0] => d // [1] => a //[2] => b //[3] => c //)
判断文件类型是否合法
$str1=join('',1)">range(0,9));string(10) "0123456789" $str2=string(26) "abcdefghijklmnopqrstuvwxyz" $str3=range('A','Z'));string(26) "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
$arr1=$arr2=$arr3=$newArr=array_merge($arr1,1)">$arr2,1)">$arr3); array_rand($newArr),1)">$res);
检测文件是否存在
$filename="msg.txt"$msgs=[]; file_exists(读取文件中的内容 $string=file_get_contents(); strlen($string)>0){ unserialize(); } }
留言功能
检测用户是否点击了提交按钮 isset($_POST['pubMsg'])){ $username=$_POST['username']; $title=strip_tags($_POST['title']); $content=$_POST['content'$time=time(); 将其组成关联数组 $data=compact('username','title','content','time'$msgs,1)">$data); serialize($msgsfile_put_contents($filename,1)">)){ echo "<script>alert('留言成功!');location.href='22-msg.PHP';</script>"; }{ echo "<script>alert('留言失败!');location.href='22-msg.PHP';</script>"; } }
count()得到数组中元素的个数
count(26 $var),1)">1 0
for循环只能遍历下标连续的索引数组
[ 5=>'a',-12=>'b',345=>'c' ];不行 [ 'username'=>'king',1)">不行 for($i=0,1)">$count=$arr)-1;$i<=$count;$i++$arr[$i],'<br/>'; }
HTML 与 PHP 混编
if举例