数组的概念
数组是一个变量存储的有序序列,能够把所有的变量集中在一起存放。
数组本质上就是一系列数据的组合,可以分为一维数组,二维数组 以及 多维数组。在程序设计中引入数组可以管理和处理数据
什么是数组
1)数组本质上就是一系列数据的组合
2)在这个组合中,每个数据都是独立的
3)可以对每个单独的数据进行分配和读取
4)数组就是一组变量的集合
5)数组以键值对的形式组合
数组的分类
索引数组
关联数组
数组的定义
索引数组(indexed array)
定义方式:下标为数字的
$数组名称[下标] 下标从0开始的数字,根据数字的不同,值不同。
直接定义:
$arr1[0]="zhangsan";
$arr1[1]="lisi";
$arr1[2]="wangwu";
$arr1[3]="jialiu";
echo $arr1[0];//单独打印一个
echo"
";
print_r($arr1);//打印变量信息 打印数组的结构 数组的结构是 数组名[下标]="值"
echo"
";
echo count($arr1);//打印数组的个数
$arrys=array("kepu",true,10);
print_r($arrys);
echo $arrys[0];//打印数组内容
print_r()打印数组结构
count()计算数组元素个数
索引数组的创建和引用
$frr1=array(
array("zhangsan",18,"man"),
array("lisi",15,"man"),
array("wangwu",16,"woman"),
array("zhaoliu",17,"woman"),
);
echo $frr1[0][0];
echo $frr1[0][1];
echo"
";
echo"
";
索引数组不连续的情况
$arr4[0]="zhangsan";
$arr4[3]="lisi";
$arr4[4]="wangwu";
$arr4[8]="jialiu";
echo "";
print_r($arr4);//和js不一样 中间没有空 可以不连续
echo"
";
echo count($arr4);//打印数量为4个 不是8个
关联数组(associative array)
定义方式:下标为变量名的
$数组名称[下标] 下标为字符串
直接定义:
$arr2["first"]="中国";
$arr2["second"]="美国";
$arr2["third"]="日本";
print_r($arr2);
echo count($arr2);
echo $arr2["first"];
$arr3=array("first"=>"中国","second"=>"美国","third"=>"日本");
echo "";
print_r($arr3);
echo count($arr3);
echo $arr3["first"];
关联数组的创建和引用
$frr2=array(
array("name"=>"zhangsan","age"=>18,"gender"=>"man"),
array("name"=>"lisi","age"=>15,"gender"=>"man"),
array("name"=>"wangwu","age"=>16,"gender"=>"woman"),
array("name"=>"zhaoliu","age"=>17,"gender"=>"woman"),
);
echo $frr2[0]["name"];
echo $frr2[1]["age"];
二维数组
语法:
$数组名称=[第一维下标][第二维下标];
楼层 | 房间号 | ||||||
---|---|---|---|---|---|---|---|
一楼(书籍) | 1101 | 1102 | 1103 | 1104 | 1105 | 1106 | 1107 |
二楼(体育用品) | 2101 | 2102 | 2103 | 2104 | 2105 | 2106 | 2107 |
三楼(水果) | 3101 | 3102 | 3103 | 3104 | 3105 | 3106 | 3107 |
四楼 | 4101 | 4102 | 4103 | 4104 | 4105 | 4106 | 4107 |
$str=array(
"书籍"=>array("文学","历史","地理"),
"体育用品"=>array("m"=>"足球","n"=>"篮球"),
"水果"=>array("橙子",8=>"葡萄","苹果")
);
echo "";
print_r($str);
$str=array(
"书籍"=>array("文学"=>array("红楼梦","西游记"),"历史"=>array('上下五千年'),"地理"),
"体育用品"=>array("m"=>"足球","n"=>"篮球"),
"水果"=>array("橙子",8=>"葡萄","苹果")
);
echo "";
print_r($str);
$str1=array(
array("文学","历史","地理"),//第0个
array("m"=>"足球","n"=>"篮球"),
array("橙子",8=>"葡萄","苹果")
);
echo "";
print_r($str1);
echo "
-----
";
echo $str1[0][0];
echo $str1[0][1];
echo $str1[1]["m"];
foreach循环
为数组提供的循环
遍历:将数组中的值都读取出来
格式
foreach(数组名称 as $key=>$val){
循环体
}
$key 依次遍历数组的下标
$val 依次遍历敬组的值
索引数组遍历
$frr1=array("zhangsan","lisi","wangwu","zhaoliu");
foreach($frr1 as $key=>$val){
echo $key."-->".$val."
";// 第一种方法:循环$key对应的是索引 $val对应的是值
}
//第二种方法
$frr2=array("zhangsan","lisi","wangwu","zhaoliu");
foreach($frr2 as $key=>$val){
echo $frr2[$key]."
";// 第二种方法:循环数组中的值
}
关联数组遍历
$url=array('明日学院'=>'www.mingsoft.com','PHP官网'=>'www.php.net','PHP之道'=>'')
foreach($url as $key=>$val){
echo $key."==>".$val."
";
}
foreach($url as $key=>$val){
echo $key."
";
}
foreach($url as $key=>$val){
echo $val."
";
}
//第二种方法
foreach($url as $key=>$val){
echo $url[$key]."
";
}
遍历二维数组
$category=array('后端开发'=>['PHP','JAVA','C++'],
'前端开发'=>['HTML','CSS','Javascript'],
'数据库开发'=>['MySQL','Oracle']
);
foreach($category as $key=>$link){
echo $key. ":".$link.'
';
//print_r $category;
}
echo "
";
$category=array('后端开发'=>'www.cckepu.com',
'前端开发'=>'www.qdkf.com',
'数据库开发'=>'www.sjkkf.com'
);
foreach($category as $key=>$link){
echo $key. ":".$link.'
';
}
标签栏
$tags = array('PHP','Java','C++','IOS');
foreach ($tags as $tag) {
$url = "http://www.mingrisoft.com/".$tag;
$return[] = ''.$tag.'';
}
print_r($return);
数组函数
count()
返回数组的个数
在统计二维数组时,如果直接使用count()函数只会显示到一维数组的个数
如果加一个COUNT_RECURSIVE(或者1) 参数,计算的是多维数组中的个数
$arr1=array("《PHP函数参考大全》","《PHP程序开发范例宝典》","《PHP网络编程自学手册》","《PHP5从入门到精通》");
echo "数组的个数是:".count($arr1);
echo "
------------------------------------------
";
/**使用count()函数递归统计数组中图书数量并输出 */
$arr2=array("PHP"=>array("《PHP函数参考大全》","《PHP程序开发范例宝典》","《PHP数据库系统开发完全手册》"),
"ASP"=>array("《ASP经验技巧宝典》")
);
echo "数组中有子数组的个数是:".count($arr2)."
";
echo "数组中有子数组的个数是:".count($arr2,COUNT_RECURSIVE)."
";
explode()
将字符串转为数组
$files="/uploads/al.jpg,/uploads/a2.jpg,/uploads/a3.jpg";
$arr2=explode(',',$files);
print_r($arr2);
echo "
";
implode()
把数组组合成字符串
echo "";
$file=array('/uploads/al.jpg','/uploads/a2.jpg','/uploads/a3.jpg');
print_r($file);
echo "implode()将数组转为字符串
";
$files=implode(",",$file);
echo $files."
";
join()
将数组拼接成字符串
$arr=array(123,"zhangsan",18,'man");
$str=join("#",$arr);
echo $str;
array_values()
将一个关联数组的值取出来组成一个新的数组
$arr=array("one'=>"zhangsan","two'=>"lisi","th'=>"wangwu");
$txt=array_values($arr);
print_r($txt);
array_keys()
将一个关联数组的键名取出来组成一个新的数组
$arr=array("one'=>"zhangsan","two'=>"lisi","th'=>"wangwu");
$txt=array_keys($arr);
print_r($txt);
array_pop()
获取数组中最后一个元素
$arr=array('ASP','JAVA','JAVA WEB','PHP','VB');
$array=array_pop($arr);
echo "被弹出的单元是".$array."
";
print_r($arr);
array_push()
向数组中添加元素 返回的是新数组的长度。会改变原数组
$arr=array('《零基础学PHP》','《PHP项目开发实战入门》');
$result=array_push( $arr,'《php从入门到精通》','《php开发实战》');
print_r($arr);//会改变原数组
echo $result;//返回的是新数组的长度
array_unique()
删除数组中重复元素
$arr=array('《零基础学PHP》','《PHP项目开发实战入门》','《php从入门到精通》','《php开发实战》','《零基础学PHP》','《php从入门到精通》');
array_push($arr,"PHP开发经典模块大全","PHP网络编程自学手册");
echo "原来数组:";
print_r($arr);
echo "
";
echo "去重之后:";
$result=array_unique($arr);
print_r($result);
list()
将数组中的值赋值给对应的变量(只对索引数组有效,对关联数组无效)
$arr=array("zhangsan","lisi",' wangwu");
list($name1,$name2,$name3)=$arr;
echo $name3:
in_array()
判断内容是否在数组中
$arr=array(1,2,3,4,5);
if(in_array(1,$arr,true)){ //"1" 不会输出
echo "在数组中,存在值";
}
array_search()
查找内容是为数组的键值,存在返回键名,不存在返回Bool假
$arr2=array ("后盾网","PHP视频","div视频");
$k=array_search ("后盾网",$arr2);
//$k=array_search ("1",$arr2); //返回false
echo $k;
权限
$id1 = 5;
$id2 = 4;
/** 定义检测是否是版主的方法 **/
function checkModerator($id){
$moderator=[1,3,5,7];
if(array_search($id,$moderator)){
echo "id=".$id."是版主";
}else{
echo "id=".$id."不是版主";
}
}
checkModerator($id1); //调用checkModerator方法
echo "
";
checkModerator($id2); //调用checkModerator方法
排名
$lang = "PHP";
$rank =array(1=>' Java',2=>'PHP',3=>'C++',4=>'C#',5=>'JS');
$rank_number = array_search($lang,$rank);
if($rank_number){
echo $lang."排名第".$rank_number."位";
}else{
echo "暂无排名";
}
next() prev() end()
$arr1 =array(1=>' Java',2=>'PHP',3=>'C++',4=>'C#',5=>'JS');
echo next($arr1);
echo prev($arr1);
echo end($arr1);
array_reverse()
反转数组
$arr=array("zhangsan","lisi","wangwu","xiaoming","xiaozhang);
$res=array_reverse($arr);
print_r($res);
array_map()
将用户自定义函数作用到数组上并返回用户自定义函数作用后带有新值
语法: array_map(自定义函数,数组名);
冒泡排序
冒泡的概念:交互数组中两个元素中的值
$arr = array (3,6,14,7,2,20,35);//0--2位置上的元素换位
$tmp=$arr[0];//3
$arr[0]=$arr[2];
$arr[2]=$tmp;
print_r($arr);
冒泡排序 3和6比 小于就不交换, 3和14比 小于就不交换 3和2比 大于就交换
//从小到大
echo "
--------从小到大 冒小泡 --------
";
$arr1=array(2,8,7,98,4,56,34,12);
for ($i=0; $i < count($arr1); $i++) {
//echo $i."
";
for($j=$i+1;$j$arr1[$j]){
$tmp1=$arr1[$i];
$arr1[$i]=$arr1[$j];
$arr1[$j]=$tmp1;
}
}
}
echo "";
print_r($arr1);
echo "
";
echo "
--------从大到小 冒大泡--------
";
//从大到小
$arr1=array(2,8,7,98,4,56,34,12);
for ($i=0; $i < count($arr1); $i++) {
//echo $i."
";
for($j=$i+1;$j";
print_r($arr1);
echo "
";