前言
不知不觉距离上篇PHP的文章 PHP学习笔记(才贯二酉)已经过去好多天了,今天看到推送——1024程序员节,莫名还有些小激动(os:自知自己的一些雕虫小技肯定和程序员这个技术深似海的称号扯不上什么关系,但是奈何人菜瘾大,还是忍不住在各位 “关公” 面前浅耍一下小刀,如有不足,感谢指正呀!)
也希望通过学习笔记巩固自己所学知识,学会举一反三,从一件事情类推而知道其他许多事情。
数组(一)
为什么要创建数组这里就不赘述了,在 PHP 中,有三种类型的数组:
数值数组
- 带有数字 ID 键的数组
关联数组
- 带有指定的键的数组,每个键关联一个值
多维数组
- 包含一个或多个数组的数组
创建数组
在 PHP 中,定义数组的方式有:
利用
array[ ]函数
来定义,这也是PHP中最常用定义数组的方法:
$arr1=array("hello","world",1); var_dump($arr1); echo "<br>"; //输出 array(3) { [0]=> string(5) "hello" [1]=> string(5) "world" [2]=> int(1) }
利用中括号来定义数组:
$arr2=["hello","world",1]; var_dump($arr2); echo "<br>" //输出 array(3) { [0]=> string(5) "hello" [1]=> string(5) "world" [2]=> int(1) }
通过键值对来定义隐形数组:
$array[]='orange'; $array[2]='apple'; $array[]='banana'; $array['watermelon']='watermelon'; var_dump($array);
隐形数组的输出:
由此可以简单总结一下PHP中数组的特点:
数组的下标可以是整数下标(数组元素均为整数下标:索引数组);也可以是字符串类型的下标(数组元素均为字符串:关联数组);也可以是不同类型下标混合使用(混合数组);
数组元素的顺序和元素放入的顺序有关,和下标无关;
整数下标具有自增长性,如果手动添加一个较大的整数下标,后面的下标会根据最大的元素下标开始自增;
特殊值的下标可以自动转换:true,false等
5.数组元素没有类型限制,也没有长度限制,不需要提前指定数组长度,比较灵活,同时效率也不会那么高;存储的位置是在堆区,为数组分配一块连续的内存。
PHP中根据索引的分类分为:索引数组、关联数组
索引数组和关联数组的差别就在键名上,索引数组的键名是数字;关联数组的键名由字符串或字符串、数字混合的形式组成;如果一个数组中有一个键名不是数字,那么这个数组就是关联数组。
索引数组
//索引数组1 下标是可以不连续的,不给加下标默认下标是0 $arr3=array( '2'=>"张三", '3'=>"张四", '4'=>"张五", '5'=>"张六", ); print_r($arr3); var_dump($arr3); echo $arr3[3]; //Array ( [2] => 张三 [3] => 张四 [4] => 张五 [5] => 张六 ) //array(4) { [2]=> string(6) "张三" [3]=> string(6) "张四" [4]=> string(6) "张五" [5]=> string(6) "张六" } //张四 //索引数组2 $arr4 = array('张三','张四','张五','张六'); print_r($arr4); echo "<br>"; echo '数组 $arr4 中的,键名为3的键值为:'.$arr4[3]; //Array ( [0] => 张三 [1] => 张四 [2] => 张五 [3] => 张六 ) //数组 $arr4 中的,键名为3的键值为:张六 //索引数组3 $arr5[0]='张三'; $arr5[1]='张四'; $arr5[2]='张五'; $arr5[3]='张六'; var_dump($arr5); //array(4) { [0]=> string(6) "张三" [1]=> string(6) "张四" [2]=> string(6) "张五" [3]=> string(6) "张六" }
关联数组
//关联数组的下标(键名)由数值和字符串混合的形式组成,如果一个数组中有一个键名不是数字,那么这个数组就是关联数组。 $arr6 = array( 'Apple' => '苹果', 'Banana' => '香蕉', 'Orange' => '橘子', 'Plum' => '李子', 'Strawberry' => '草莓' ); print_r($arr6); //Array ( [Apple] => 苹果 [Banana] => 香蕉 [Orange] => 橘子 [Plum] => 李子 [Strawberry] => 草莓 )
多维数组
我们以二维数组为例,它的语法有:
1、直接赋值法,语法
$array[一维下标][二维下标]="值";
2、使用array()函数,语法array(array(key=>value...),array(key=>value...)....);
比如
//直接赋值法: $stu[0]['姓名'] = '张三'; $stu[0]['年龄'] = '25'; $stu[0]['性别'] = '男'; $stu[1]['姓名'] = '李四'; $stu[1]['年龄'] = '21'; $stu[1]['性别'] = '男'; $stu[2]['姓名'] = '娜娜'; $stu[2]['年龄'] = '22'; $stu[2]['性别'] = '女'; var_dump($stu); //array(3) { [0]=> array(3) { ["姓名"]=> string(6) "张三" ["年龄"]=> string(2) "25" ["性别"]=> string(3) "男" } [1]=> array(3) { ["姓名"]=> string(6) "李四" ["年龄"]=> string(2) "21" ["性别"]=> string(3) "男" } [2]=> array(3) { ["姓名"]=> string(6) "娜娜" ["年龄"]=> string(2) "22" ["性别"]=> string(3) "女" } } //使用array()函数 $stu1=array( array('张三','25','男'), array('李四','21','男'), array('娜娜','22','女'), ); var_dump($stu1); //array(3) { [0]=> array(3) { [0]=> string(6) "张三" [1]=> string(2) "25" [2]=> string(3) "男" } [1]=> array(3) { [0]=> string(6) "李四" [1]=> string(2) "21" [2]=> string(3) "男" } [2]=> array(3) { [0]=> string(6) "娜娜" [1]=> string(2) "22" [2]=> string(3) "女" } } $stu2=array( array('name'=>'lili','sex'=>'famale','age'=>12), array('name'=>'tom','sex'=>'male','age'=>15), array('name'=>'join','sex'=>'famale','age'=>10) ); echo ($stu2[0]['name']);//输出指定数组元素 lili echo "<br>";
数组的遍历
PHP中遍历数组有三种常用的方法:
1、使用for语句循环遍历数组;
2、使用foreach语句遍历数组;
3、联合使用list()、each()和while循环遍历数组(感觉挺有意思的,试一下)
这三种方法中效率最高的是使用foreach语句遍历数组,在这里着重介绍一下foreach语句:
//for语句 $arr9 = array('tom','lili','join'); $num = count($arr9);//count用来获取数组的长度 for($i=0;$i<$num;++$i){ echo $arr9[$i].'<br />'; } //foreach语句 //每次循环中,当前元素的值被赋给变量$value,并且把数组内部的指针向后移动一步。所以下一次循环中会得到数组的下一个元素,直到数组的结尾才停止循环,结束数组的遍历。 foreach($arr9 as $value){ echo $value."<br>"; } //tom //lili //join foreach($arr9 as $key=> $value){ echo $key.$value."<br>"; } //打印出键名(下标) //0tom //1lili //2join //联合使用list()、each()和while循环遍历数组 $arr = array('Chinese'=>'沃和莱特','english'=>'varlet'); while(list($key,$value) = each($arr)){ echo $key.'=>'.$value.'<br />'; } //Chinese=>沃和莱特 //english=>varlet
foreach语句遍历二维数组:
// 二维数组的遍历 $employee=array( "人事部"=>array('a','b','c'), "研发部"=>array('d','e','f'), ); //打印出人事部有abc,研发部有def; foreach($employee as $key=>$value){ echo $key.":"; foreach($value as $keyin=>$valuein){ echo $valuein." "; } echo "<br>"; } //人事部:a b c //研发部:d e f
// 把一个数组遍历成一个表格 $people=array( array('name'=>'张三','sex'=>'male','age'=>25,'ad'=>"济南"), array('name'=>'李四','sex'=>'famale','age'=>27,'ad'=>"上海"), array('name'=>'王五','sex'=>'male','age'=>21,'ad'=>"青岛") ); echo "<table border='1'>"; echo "<tr><th>id</th><th>name</th><th>sex</th><th>age</th><th>ad</th></tr>"; foreach($people as $key=>$value){ echo "<tr>"; echo "<td>$key</td>"; foreach($value as $keyin=>$valuein){ echo "<td>$valuein</td>"; } echo "</tr>"; } echo "</table>"; echo "<br>";
简单总结一下foreach遍历的本质就是数组的内部有一颗指针,默认指向数组元素的第一个元素,foreach利用指针获取数组,同时移动指针;并且foreach会重置指针,让指针指向第一个元素;
数组函数
//返回数组元素的位置 $str2=["张三",23,"jinan"]; $res=array_search("张三",$str2); echo $res; // 0 // 删除数组最后一个元素 $str2=["张三",23,"jinan"]; $res1=array_pop($str2); echo $res1; // jinan // 默认向数组尾部增加一个元素 $str2=["张三",23,"jinan"]; $res2=array_push($str2,"qingdao"); print_r($str2); // Array ( [0] => 张三 [1] => 23 [2] => jinan [3] => qingdao ) //数组去重 $arr3=["join","jim","tom","tom"]; $res4=array_unique($arr3); var_dump($res4); // array(3) { [0]=> string(4) "join" [1]=> string(3) "jim" [2]=> string(3) "tom" } // 数组排序 升序 $arr4=["mudan","meigui","huaihua"]; sort($arr4); print_r($arr4); // Array ( [0] => huaihua [1] => meigui [2] => mudan ) $arr5=[12,13,32,45,0]; sort($arr5); print_r($arr5); // Array ( [0] => 0 [1] => 12 [2] => 13 [3] => 32 [4] => 45 ) // 降序排序 $arr4=["mudan","meigui","huaihua"]; rsort($arr4); print_r($arr4); // Array ( [0] => mudan [1] => meigui [2] => huaihua ) $arr5=[12,13,32,45,0]; rsort($arr5); print_r($arr5); // Array ( [0] => 45 [1] => 32 [2] => 13 [3] => 12 [4] => 0 ) // 根据数组的值升序排序 $age=array( "granderfather"=>110, "grandermonther"=>100, "father"=>42, "mother"=>40, "brother"=>10, "me"=>19, ); asort($age); print_r($age); // Array ( [brother] => 10 [me] => 19 [mother] => 40 [father] => 42 [grandermonther] => 100 [granderfather] => 110 ) // 根据键值进行升序排序 $age1=array( "ben"=>11, "lili"=>12, "tom"=>13 ); ksort($age1); print_r($age1); // Array ( [ben] => 11 [lili] => 12 [tom] => 13 ) // 根据键值进行降序排序 $age1=array( "ben"=>11, "lili"=>12, "tom"=>13 ); krsort($age1); print_r($age1); // Array ( [tom] => 13 [lili] => 12 [ben] => 11 ) // 打乱数组 $age=array( "granderfather"=>110, "grandermonther"=>100, "father"=>42, "mother"=>40, "brother"=>10, "me"=>19, ); shuffle($age); print_r($age); // Array ( [0] => 100 [1] => 42 [2] => 19 [3] => 40 [4] => 10 [5] => 110 ) // 删除数组 $arr5=[12,13,32,45,0]; unset($arr5[0]); print_r($arr5); // Array ( [1] => 32 [2] => 13 [3] => 12 [4] => 0 ) // 返回所有元素并将其放在一个新的数组中 $age1=array( "ben"=>11, "lili"=>12, "tom"=>13 ); $res9=array_values($age1); print_r($res9); // Array ( [0] => 11 [1] => 12 [2] => 13 ) // 返回一个包含从 "0" 到 "50" 之间并以 10 递增的元素的数组: $number = range(0,50,10); print_r ($number); // Array ( [0] => 0 [1] => 10 [2] => 20 [3] => 30 [4] => 40 [5] => 50 ) // 返回指定范围的索引 $num=[12,13,32,45,0,7,8,10]; $Nu=array_slice($num,1,3);//从第一个元素到第三个元素 print_r($Nu); // Array ( [0] => 13 [1] => 32 [2] => 45 )
总结
以上就是这篇文章对php数组的介绍啦,后续还会持续更新~可爱的程序员大佬们1024快乐,你是电脑的灵魂,你是网络的主人,你是程序的化身,你是创意的天使,你是互联网的传说,期待创造与前进,加油!