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