下标:数组中的识别名称也就是字符串或整数在数组中的代号 数组中有几个索引值就被称为几维数组。
索引值:索引是对数据库表中一列或多列的值进行排序的一种结构。 数组分类
在PHP数组被分为两种:
索引数组:索引(indexed)索引值是整数,以0开始,当通过位置来标识东西时用索引数组。
关联数组:关联(associative)关联以字符串做索引值,索引值为列名,用语访问列的数据。 数组通常用赋值的方式
一般情况下数组赋值有两种方式:
$a[1]="dsadsadsa";
$b[2]="dsadsadsad";
使用array函数:
$a=array("dsads","dsadsa",321312);
一维数组:数组的索引值(下标)只有一个的时候称之为一维数组。
数组直接赋值的格式:
$数组变量名[索引值]=资料内容;
注意:索引值可以是字符串也可以是整数但是1与“1”是不同的它们一个属于整数一个属于字符串。 同名没有给予索引值的数组是按照顺序排列的。
实例:
<?PHP
$a=array(1,2,3,4,5,6);
$b=array("one","two","three");
$c=array(0=>"aaa",1=>"bbb",2=>"ccc");
$d=array("aaa",6=>"bbb","ccc");
$e=array("name"=>"zhang","age"=>20);
?>
二维数组
多维数组的格式:
$a[0][]="dsadas";
$a[0][]="dsadsa";这组是$a下的0索引值下的1和2
如果用array函数声明格式如下:
$a=array("dsadsa","dsadas",21,array("dsadsa","dsadas")); 数组的遍历
foreach循环结构:
foreach仅用与数组的循环两种格式
foreach(array_expRSSion(数组表达)as$value);
foreach(array_expRSSion(数组表达)as$key=>$value);
第一种格式遍历给定了array_expRSSion数组。每一次循环中当前的值都被赋给我$calue,并且数组内部的指针向前移动一步。
第二种格式做同样的事,只除了当前单元的键值也会在每次循环中被赋给变量$key。
当foreach开始执行时,数组内部的指针会自动指向第一个单元。此外注意foreach所操作的是指定数组的一个拷贝,而不是该数组本身
$arr=array(10,20,30,40,50,60);
foreach($arras$k=>$v){
echo"$k=>$v
";
} 输出结果:0=>101=>202=>303=>404=>505=>60//下标=>整数
联合使用list(),each()和while循环
each():
$arr=array(1,5);
$a=each($arr);
print_r($a);
输出结果:Array([1]=>1[value]=>1[0]=>0[key]=>0)
拿取数组第一位的值value下标key
list():
$arr3=array("a","b","c");
list($key,$value)=each($arr3); echo$key."
".$value;
输出结果:0alist()可以说是用一步操作给一组变量赋值仅能用于数字索引的数组并假定数字索引从0开始。
while循环
$arr=array(1,6,7,8,9,);
while(list($key,$value)=each($arr)){
$key++;
echo$key."=>".$value;
echo"
";
}
echo"
";
输出结果:1=>12=>23=>34=>45=>56=>67=>78=>89=>9
reset()数组指针重定向
在执行each()之后,数组指针将停留在数组中的下一个单元或者当碰到数组结尾时停留在最后一个单元。
is_array检测变量是否为数组真返回ture假false
$arr=array(1,"saas");
while(list($k,$v)=each($arr))
{
if(is_array($arr))
{
$x+=$v;
echo$x;
}
else
{
$x+=$k;
}
}
这个范例不能完全体现is_array的功能,但是可以参考。
数组的指针
next():负责将指针向后移动
prve():负责将指针向前移动
end():会将指针指向数组最后一个元素
reset():将目前指针无条件移至第一个索引位置
语法格式:mixednext(数组名称)
$arr=(array(1,5));
echoend($arr);
输出结果:5
key()与current()和count()
key()的函数是读取目前指针所指向的资料的索引值。
current()的函数则是读取目前指针所指向资料的内容资料。
count()的函数是用来计算数组中所有元素的个数,也就是说函数会传回目标数组的长度值。
格式:intcount(数组名称); key():从关联数组中取得键名
$array=array('fruit1'=>'apple','fruit2'=>'orange','fruit3'=>'grape','fruit4'=>'apple','fruit5'=>'apple');
while($fruit_name=current($array)){
if($fruit_name=='apple'){
echokey($array).'
';
}
next($array);
}
输出结果:fruit1,fruit4,fruit5 current():返回数组中的当前单元
$transport=array('foot','bike','car','plane');
$mode=current($transport);//$mode='foot';
$mode=next($transport);//$mode='bike';
$mode=current($transport);//$mode='bike';
$mode=prev($transport);//$mode='foot';
$mode=end($transport);//$mode='plane';
$mode=current($transport);//$mode='plane';
注意看范例返回数组中的当前单元 count():计算数组中单元的个数
$arr=array(1,6);
echocount($arr);
输出结果:6 array_change_key_case()
array_change_key_case返回字符串键名全为小写或者大写的数组
其中包含的形态函数有两个[CASE_UPPER]转换为大写,[CAS_LOWER]转换为小写。
$input_array=array("FirSt"=>1,"SecOnd"=>4);
print_r(array_change_key_case($input_array,CASE_UPPER));
输出结果:Array([FIRST]=>1[SECOND]=>4) array_chunk()
array_chunk()次函数会将目标数组的资料内容,以指定索引个数,分解成数个小型数组包含在原数组中。
$arr=array(1,6);
$a=array_chunk($arr,3);
print_r($a);
输出结果:Array([0]=>Array([0]=>1[1]=>2[2]=>3)[1]=>Array([0]=>4[1]=>5[2]=>6))
也就是等于用数组单元个数的总和除以3 array_count_values
array_count_values用来计算目标数组中各值出现的次数
语法格式:array_count_values(目标数组)
此函数所传回结果值,会以原数组的内容资料作为索引,以数组的形态表现。
$arr=array(1,6);
print_r(array_count_values($arr));
输出结果:Array([1]=>1[2]=>2[3]=>2[6]=>1)array_fill
array_fill让使用者可以自定义数值,填满目标数组中指定的索引区段。
语法格式:array_fill(起始索引位置,区段大小,指定字元)
其中起始索引位置与区段大小必须为integer(整型)形态数值,而且区段大小指定不得为0。
$a=array_fill(5,'banana');
print_r($a);
输出结果:Array([5]=>banana[6]=>banana[7]=>banana[8]=>banana[9]=>banana[10]=>banana) array_filter
array_filter依次将目标数组中的每个值传递到使用者自定义函数。如果使用者自定义函数返回TRUE(真
),则input数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。
语法格式:array_filter(目标数组,使用者自定义函数)
functionodd($var)
{
return($var%2==1);
}
$array1=array("a"=>1,"b"=>2,"c"=>3,"d"=>4,"e"=>5);
print_r(array_filter($array1,"odd"));
输出结果:Odd:Array([a]=>1[c]=>3[e]=>5)
$entry=array(0=>'foo',1=>false,2=>-1,3=>null,4=>'');
print_r(array_filter($entry));
输出结果Array([0]=>foo[2]=>-1)
其它的回调函数:array_walk(),array_map() array_flip
array_flip将目标数组中的索引与内容值,作反相的处理,反相后的数组会以原内容值作为索引,而索引作为资料内容.
array_flip语法格式:交换数组中的键和值
array_flip(目标数组)
$trans=array("a"=>1,"b"=>1,"c"=>2);
$trans=array_flip($trans);
print_r($trans);
输出内容:Array([1]=>b[2]=>c)
如果同一个值出现了多次,则最后一个键名将作为它的值,所有其它的都丢失了。 array_sum
array_sum用来计算数组中所有元素值的总和。
语法格式:array_sum(目标数组) array_unique
array_unique用来除区目标数组中重复的资料,并运算后传回新的数值。 array_keys与array_values
array_keys该函数将忽略原始的键名,使用顺序的数字对数组重新索引,针对关联数组。
array_values该函数返回一个包含数字或字符串的键名数组。返回input数组中所有的值并给其建立数字索引。
$arr=array("a"=>1,"abc",2);
$b=array_keys($arr);
$c=array_values($arr);
输出结果:$b=Array([0]=>a[1]=>b[2]=>0[3]=>1)
$c=Array([0]=>1[1]=>2[2]=>abc[3]=>2) 数组的检索
对数组的检索,主要指对数组的键名或者元素值进行判断,从而确定某个数组元素的存在与否。
语法格式:boolin_array(mixed$needle,array$haystack[,bool$strict]);
$arr3=array(1,"hello","wprld");
$b=in_array("hell",$arr3,true);
var_dump($b);
$arr4=array(1,array("hello","world"));
$b=in_array(array("hello","world"),$arr4);
var_dump($b);
输出结果:bool(false)bool(true) 数组和变量之间转换
extract()和compact()函数进行数组与变量之间转换。
转换后,数组元素的键名与变量名,以及元素的值与变量的值保持着对应的关系。
extract这个函数用于将变量从数组中倒入当前符号表中
$info=array("user_id"=>2006001,"user_name"=>"佟香玉","position"=>"项目经理");
extract($info);
echo$user_id;
输出结果:2006001
compact()接受可变的参数数目。每个参数可以是一个包括变量名的字符串或者是一个包含变量名的数组,该数组中还可以包含其它单元内容为变量名的数组,compact()可以递归处理。
$city="SanFrancisco";
$state="CA";
$event="SIGGRAPH";
$location_vars=array("city","state");
$result=compact("event","nothing_here",$location_vars);
print_r($result);
输出结果:Array([event]=>SIGGRAPH[city]=>SanFrancisco[state]=>CA) 数组与栈
array_push()函数将一个或多个元素压入数组栈的末尾(入栈),返回入栈元素的个数。
array_pop()函数将数组栈的最后一个元素弹出,并将该元素返回。
范例array_push
$a=array("dsa","dsas","dfs","gfd");
array_push($a,"ssss","ddddd");
print_r($a);
输出结果:Array([0]=>dsa[1]=>dsas[2]=>dfs[3]=>gfd[4]=>ssss[5]=>ddddd)
范例array_pop弹出并返回array数组的最后一个单元,并将数组array的长度减一。如果array为空(或者不是数组)将返回NULL。
$a=array("dsa","gfd");
array_pop($a);
print_r($a);
输出结果:Array([0]=>dsa[1]=>dsas[2]=>dfs) 数组与对列
队列也可以以数组的形态出现,数组中的第一个元素是对头,最后是对尾。
在对尾插入元素可以使用堆栈的方法。
从队列数组中删除对头元素可以使用array_shift函数,该函数将数组的第一个元互移出并作为结果返回,同时,数组长度减1,并且其他元素向前移动一位。所有的数字键名将改为从零开始计数,文字键名将不改变。
array_shift范例
$a=array("dsa","gfd");
$title=array_shift($a);
print_r($a);
输出结果:Array([0]=>dsas[1]=>dfs[2]=>gfd)
可以使用array_unshift()函数在队列数组的开头插入一个或多个元素,该函数返回成功插入元素个数。
$a=array("dsa","gfd");
$title=array_unshift($a,"a",array(1,2));
print_r($a);
输出结果:Array([0]=>a[1]=>Array([0]=>1[1]=>2)[2]=>dsa[3]=>dsas[4]=>dfs[5]=>gfd)
由结果可以看出还可以插入数组 数组的排序
忽略键名的数组排序
sort()正
rsort()倒
usort()
$arr=array("3"=>"lemon","2"=>"orange","4"=>"banana","1"=>"apple");
ksort($arr);
foreach($arras$key=>$val){
echo"$key=$val\n";
} 数组的计算
对数组的计算是比较方便的。最简单的计算是求数组内部的所有元素之和。也可以把数组作为一个集合处理,对两个或多个数组进行合并,计算数组间的差集或交集等。
数组的合并合并并不是+
范例
$arr2=array(1,3);
$arr3=array(3,5);
$a=array_merge($arr2,$arr3);
print_r($a);
输出结果:Array([0]=>1[1]=>2[2]=>3[3]=>3[4]=>4[5]=>5)
计算数组的差集
$array1=array("a"=>"green","red","blue","red");
$array2=array("b"=>"green","yellow","red");
$result=array_diff($array1,$array2);
print_r($result);
输出结果:Array([1]=>blue)差级是取前面的区别值
计算数组的交集
$array1=array("a"=>"green","blue");
$array2=array("b"=>"green","red");
$result=array_intersect($array1,$array2);
print_r($result);
输出结果:Array([a]=>green[0]=>red)交集取上下两边共同都有的 创建指定范围的数组:
range();
移除数组中重复的值:
array_unique();
逆序返回数组:
array_reverse(); 数组的随机函数:随机数
srand((float)microtime()*10000000)设置随机发生器种子
array_rand();
array_shuffle();
范例
echodate("Ymd").rand(1000000,9999999)."jpg"; 输出结果:200805096246795jpg的随即数
课件为PHPchina学习课件
php数组.rar