|
PHP数组与数据结构
数组是把若干变量按有序的形式组织起来的一种形式。
这些数据元素的集
数组分为一维二维三维、索引数组(数组索引是整数)和关联数组
(1)数组的声明
1、一个数组中存的多个内容、数组中的内容叫作“元素”
2、每个元素都是由健和值组成的Key/value
$a=array(“one”=>”111”,”two”=>”2222”);
3、下标有二种类型:一种是整数(索引数组)、一种是字符串(关联数组)
4、[]和{}来操作下标
5、在使用下标时、如果是关联数组、一定要使用引号、不要使用常量名称(各种类型都可以作下标、但会强制转换)
6、数组的自动增涨下标、默认从0开始、出现最大值加1
7、关联数组的字符串下标、不影响索引下标的排列规则
8、使用array()函数声明数组、默认索引下标从0开始
9、使用=>符号指定下标
Php5.4以后可以像其他语言一样声明数组$arr=[“a”,”bb”];
10、删除数组中的一个元素使用unset(但不会重建索引)删除后重建用array_values()函数
二维数组(数组的数组)三维数组 $group=array(array(“1”,”2”), array(“1”,”2”),)
(2)for循环遍历数组
当数组下标不是连续的时候、For循环遍历不了数组
$arr=array(“aa”,”bb”,”cc”);
For($i=0;$i自定义变理(值)){
}
$arr=array(“11”,”bb”);
Foreach($arras $key => $values){
Echo “{$key}====>{$values}”
}
$arr= array(
array("name"=>"ssw","age"=>22, "性别"=>"sex"),
array("name"=>"ssw1","age"=>29, "性别"=>"six"),
array("name"=>"ssw2","age"=>26, "性别"=>"sex")
);
echo"";
echo"数组转为表格";
foreach($arras $row){
echo "";
foreach($row as $col){
echo"".$col."";
}
echo "";
}
echo"";
(4)联合使用list() each() while()循环遍历使用
List()作用:
1、等号左边用list()函数、等号右边只能是一个数组
2、数组中有几个元素、在list()中就用几个参数、而且参数必须是变量、不能是值
3、只能将索引数组(下标是连续)、转为变理、是按下标0开始找的
4、可以在list()参数中通过、空项选择性接收数组中的元素
$str=”天涯_海角”;
List($name,$sea)=explode(“_”,$str);
Echo $name;
Echo $sea;
天涯
海角
Each()是一个函数、参数为数组、返回值也是一个数组
1、返回值是一个数组、数组有4个固定元素、下标固定的1 值 value值 0 下标key下标
2、each()只处理当前元素、将当前元素转为数组信息、处理完后、指针向下一个元素移动
3、如果指定已经结束了、在使用each()获取元素、返回false
$arr =array("one"=>"Thinkphp","two"=>"Yii", "three"=>"smarty");
while(list($key,$val) = each($arr)){
echo"{$key}=>{$val}";
}
显示:
one=>Thinkphp
two=>Yii
three=>smarty
(5)数组内部指针遍历数组
控制指定的位置next(下一个) prev(上一个) end(最后一个) reset(第一个)
Key()获取数组当前下标 current()获取数组当前值
$arr =array("one"=>"Thinkphp","two"=>"Yii", "three"=>"smarty");
Echo “当前位置:” . ”key($arr)”. ”==>” . ”current($arr)” . ””;
(6)php超全局数组
超全局数组(变量)在系统中已预定好的、可以直接调用
$_SERVER 服务器变量
$_ENV 环境变量
$_GET http get变量 接收用户通过url向服务器传的参数
$_POST http post变量 接收用户通过http协议向服务器传的参数
$_REQUEST request变量 此关联数组包含$_GET $_POST$_COOKIE中全部内容
$_FILES http文件上传变量
$_COOKIE http cookies
$_SESSION session变量
$_GLOBALS global变量
Print_r($_SERVER);
(7)PHP常用数组函数
数组的键值操作函数(函数主要看功能 返回值)
Array_values()返回数组中所有的值,返回数组。
$sh=array(“shang”=>”上海”,”海”=>”海南”);
Print_r(Array_values($sh));
显示为:Array ( [0] => ”上海” [1] => ”海南” )
Array_keys(array,value,strict)返回数组中所有的键,返回数组。
Array为数组 value可选指定键值、然后只有该键值对应的键名被返回
Strict 可选 true 依赖类型 faLse不依赖类型
显示为:Array ( [0] => 3 )
In_array(search, array,type)搜索数组中是否存在指定的值,返回真假。
Search 必需、规定要在数组搜索的值
Array 必需、规定要搜索的数组
Type 可选、设置该参数为 true,则检查搜索的数据与数组的值的类型是否相同。
$sh=array(“shang”=>”上海”,”海”=>”海南”);
If(in_array(“上海”, $sh)){
Echo“在数组中”
}else{
Echo“不在数组中”:
}
显示:在数组中
array_search(search,array, type)函数在数组中搜索某个键值,并返回对应的键名,如果没找到,则返回 false
Search 必需、规定要在数组搜索的值
Array 必需、规定要搜索的数组
Type 可选、设置该参数为 true,则检查搜索的数据与数组的值的类型是否相同。
$a=array("a"=>"5","b"=>5,"c"=>"5");
echoarray_search(5,$a,true);
显示:b
Array_key_exists(search, array, type)搜索数组中是否存在指定的键,返回真假。
Search 必需、规定要在数组搜索的值
Array 必需、规定要搜索的数组
Type 可选、设置该参数为 true,则检查搜索的数据与数组的值的类型是否相同。
$a=array("a"=>"5","b"=>5,"kong"=>null);
If(array_key_exists(“kong”, $a)){
Echo“在数组中”
}else{
Echo“不在数组中”:
}
显示:在数组中
Array_flip(array)交换数组中所有的键名以及它们关联的键值、返回数组(只能处理整数和字符串)
$a=array("a"=>"5","b"=>5,"c"=>"cisoco");
print_r(array_flip($a));
显示:Array ( [5] => b [cisoco] => c ) //重复下标会被后面相同键名的覆盖
Array_reverse(array,preserve)将原数组中的元素顺序翻转,创建新的数组并返回
Array 必需、规定数组
Preserve可选(true/false)规定是否保留原始数组的键名
$a=array("a","b","c");
$reverse=array_reverse($a);
$preserve=array_reverse($a,true);
print_r($a);
echo"";
print_r($reverse);
echo"";
print_r($preserve);
显示为:
Array( [0] => a [1] => b [2] => c )
Array ( [0] => c [1] => b [2] => a )
Array ( [2] => c [1] => b [0] => a )
统计数组元素的个数与唯一性
Count(array,mode)返回数组中元素的数目(strlen是统计字符串长度)
Array 必需、规定数组
Mode 可选、0为不对多维数组统计、1递归统计数组中的元素
$cars=array
(
"Volvo"=>array( "XC60", "XC90"),
"BMW"=>array("X3","X5"),
"Toyota"=>array("Highlander")
);
echo "常规计数:" .count($cars)."";
echo "递归计数:" .count($cars,1);
显示为:
常规计数:3
递归计数:8
Array_count_values(array)统计数组中所有值出现的次数、返回一个数组
$a=array("A","Cat","Dog","A","Dog");
print_r(array_count_values($a));
显示为:
Array ( [A] => 2 [Cat] => 1 [Dog] => 2 )
Array_unique(array)移除数组中的重复的值,并返回结果数组
当几个数组元素的值相等时,只保留第一个元素,其他的元素被删除
$a=array("a"=>"red","b"=>"green","c"=>"red");
print_r(array_unique($a));
显示为:Array ( [a] => red => green )
使用回调函数处理数组的函数
Array_filter(array,callbackfunction);用回调函数过滤数组中的值、返回原数组
Callbackfunction 必需 规定要使用的回调函数
$arr = array(1,3,4,false,-2,-1,-6,null,-8);
var_dump(array_filter($arr));
echo "";
function myfun($value){
if($value>= 0)
returntrue;
else
returnfalse;
}
var_dump(array_filter($arr,"myfun"));
var_dump(array_filter($arr,function($value){
return!($value%2==0);
}));
显示为:
array(7){ [0]=> int(1) [1]=> int(3) [2]=> int(4) [4]=> int(-2) [5]=>int(-1) [6]=> int(-6) [8]=> int(-8) }
array(5) { [0]=> int(1) [1]=> int(3) [2]=> int(4) [3]=> bool(false)[7]=> NULL }
array_walk(array,myfunction, userdata)对数组中的每个元素应用用户自定义函数。在函数中,数组的键名和键值是参数
array必需。规定数组。
myfunction必需。用户自定义函数的名称。
Userdata可选。规定用户自定义函数的参数
事例一:
$arr = array(1,2,3,4,5);
function myfun(&$value){
$value=$value*$value;
}
print_r($arr);
echo "";
array_walk($arr,"myfun");
print_r($arr);
显示为:
Array( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 )
Array ( [0] => 1 [1] => 4 [2] => 9 [3] => 16 [4] => 25 )
事例二:
$_arr = array(22,44,66,76,43,24);
array_walk($_arr, function($value,$key){
var_dump($value, $key);
echo"";
});
显示:int(22) int(0)
int(44) int(1)
int(66) int(2)
int(76) int(3)
int(43) int(4)
int(24) int(5)
事例三:
$arr =array("one"=>1,"two"=>2,"three"=>3,"four"=>4,"five"=>5);
function myfun($key,$value){
echo"{$key}===={$value}";
}
array_walk($arr,"myfun");
显示为:
1====one
2====two
3====three
4====four
5====five
事例四:
$arr =array("one"=>1,"two"=>2,"three"=>3,"four"=>4,"five"=>5);
array_walk($arr, function($v,$k,$str){
echo"{$k} {$str} {$v}";
}, "++++");
print_r($arr);
echo "";
显示为:
1++++one
2++++two
3++++three
4++++four
5++++five
Array_map(callback,$array1,$array2)将回调函数作用到给定数组的单元上、返回一个数组。
callback 回调函数
array 为数组
$arr=array(1,2,3,4);
$brr=array("one","two");
function myfun($v,$bv){
echo" $v --- $bv ";
return1;
}
$rarr = array_map("myfun",$arr,$brr);
print_r($rarr);
显示为:
1--- one
2 --- two
3 ---
4 ---
Array ( [0] => 1 [1] => 1 [2] => 1 [3] => 1 )
$arr=array(1,2,3);
$brr=array("one","two");
$rarr = array_map(null,$arr,$brr);
echo "";
print_r($rarr);
echo "";
显示为:
Array( [0] => Array ( [0] => 1 [1] => one ) [1] => Array ( [0] => 2 [1] => two ) [2] => Array ( [0] => 3 [1] => )) 数组的排序函数
1、冒泡法进行排序实例
代码:
|
|