数组的类型:
①索引数组:下标为数字
②关联数组:下标为字符
声明数组:
$arr=array(x,x,x,x);
$arr=array(); //空数组
数组的使用:
通过下标来找对应的值:键值=$数组名称[键名]
打印数组:
print_r($arr):打印数组
遍历数组:
foreach($数组名称 as $键名=>$键值){ } //遍历取出键名和键值
foreach($数组名称 as $键值){ } //遍历取出键值
foreach($arr as $key=>$val){
}
foreach($arr as $val){
}
foreach($arr as $val){
foreach($val as $v){
}
}
例:
<?php
$arr=array(
array("title"=>"新闻1","content"=>"内容1");
array("title"=>"新闻2","content"=>"内容2");
array("title"=>"新闻3","content"=>"内容3");
array("title"=>"新闻4","content"=>"内容4");
);
?>
<table>
<tr>
<td>编号</td>
<td>标题</td>
<td>内容</td>
</tr>
<?php
$i=1;
foreach($arr as $val){
?>
<tr>
<td><?php echo $i; ?></td>
<td><?php echo $val['title']; ?></td>
<td><?php echo $val['content']; ?></td>
</tr>
<?php
$i++;
}
?>
</table>
要在遍历数组的同时,向数组中添加新的元素:
foreach($arr as &$val){
$val['元素名称']="$str"/array();
}
1、数组的创建与注销:
动态创建连续的索引数组:
$数组名称[]=值; 默认下标自动从0开始
例:
$arr[]="abc"; $arr[]=25; $arr[]=true;
print_r($arr); //Array([0]=>abc[1]=>25[2]=>1)
动态创建数组,并指定其下标:
$数组名称[数字]=值 $数组名称["字符"]=值
$arr1[]=100; $arr2["username"]="Autumn";
$arr1[2]="12345"; $arr2['age']=25;
$arr1[4]="hello world"; $arr2['sex']=true;
$arr1[]=true; print_r($arr2); //Array([username]=>Autumn[age]=>25[sex]=>1)
print_r($arr1); //Array([0]=>100[2]=>12345[4]=>hello world[5]=>1)
特殊情况:
下标如果全部为负数的情况下,新添加的元素下标从0开始;其他情况下标从当前元素下标中的最大值+1;
通过函数来快速创建数组:
range($min ,$max [,$step]):快速创建索引数组,返回下标连续的索引数组
$step:可选参数,默认为1,指定创建的索引数组键值的步长(间隔)
例:
$arr=array("a","b","c"..."z"); ===> $arr=range("a","z");
$arr=range(1,10,2);
print_r($arr); //Array([0]=>1[1]=>3[2]=>5[3]=>7[4]=>9)
compact("变量名称1","变量名称2","变量名称3"...):快速创建关联数组,变量也可为多维数组,作递归处理
$arr[]=compact("变量名称1","变量名称2","变量名称3"...):快速创建二维的关联数组
例:
$username="Autumn";
$age=25;
$sex=true;
$arr=compact("username","age","sex");
print_r($arr); //Array([username]=>Autumn[age]=>25[sex]=>1)
$arr1=array("abc",100,"addr"=>"china");
$arr2=compact("username","age","sex","arr1");
print_r($arr2); //Array([username]=>Autumn[age]=>25[sex]=>1[arr1]=>Array([0]=>abc[1]=>100[addr]=>china))
array_fill($start_key ,$num ,$val):用给定的内容填充生成新的索引数组
$start_key:指定起始的下标键值
$num:填充的数量
$val:指定要填充的内容,内容既可为变量值也可为多维数组
例:
$val=array("Z",25,"id"=>8);
$arr=array_fill(2,3,$val);
print_r($arr); //Array([2]=>Array([0]=>Z[1]=>25[id]=>8)[3]=>Array([0]=>Z[1]=>25[id]=>8)[4]=>Array([0]=>Z[1]=>25[id]=>8))
获得数组中的元素个数:
count($arr):该函数可计算数组中元素的个数或对象中的属性个数,作用等同于 sizeof($arr)
例:
$arr=range("a","z");
for($i=0;$i<count($arr);$i++){
echo $arr[$i];
}
unset($arr[$key]):用注销方式来清除数组中下标键值$key对应的元素数据,该元素的键值和键名均会被清除,数组的下标键值会断开
例:
$arr=array("username"=>"autumn","a","b","age"=>25,10,"d");
print_r($arr); //Array([username]=>autumn[0]=>a[1]=>b[age]=>25[2]=>10[3]=>d)
echo "<hr/>";
unset($arr[1]);
print_r($arr); //Array([username]=>autumn[0]=>a[age]=>25[2]=>10[3]=>d)
echo "<hr/>";
unset($arr["age"]);
print_r($arr); //Array([username]=>autumn[0]=>a[2]=>10[3]=>d)
2、数组的合并和拆分
array_merge($arr1 ,$arr2 ...):当只输入一个索引数组时,下标从0开始重新索引该数组;当输入两个或多个数组时,合并为一个数组,索引数组重新索引后依次添加键值,关联数组键名有重复的后者的键值替换前者的键值
例:
$arr1=array("a","b",5=>"c","d");
$arr=array_merge($arr1);
print_r($arr); //Array([0]=>a[1]=>b[2]=>c[3]=>d)
$arr1=array("a","b","age"=>18);
$arr2=array("d","username"=>"autumn","age"=>25,"sex"=>true);
$arr=array_merge($arr1,$arr2);
print_r($arr);
//Array([0]=>a[1]=>b[age]=>25[2]=>d[username]=>autumn[sex]=>1)
array_combine($arr1 ,$arr2):用数组$arr1的键值作为键名,用数组$arr2的键值作为键值,合并生成一个新的数组;数组$arr1和数组$arr2的元素个数必须相同
例:
$arr1=array("a","b","c");
$arr2=array("username"=>"autumn","age"=>25,"sex"=>true);
$arr=array_combine($arr1,$arr2);
print_r($arr); //Array([a]=>autumn[b]=>25[c]=>1)
array_chunk($arr ,$num ,false):取一个数组的键值分割为新的多维索引数组块
$num:指定分割后的子数组所包含的元素个数,最后一个子数组的元素个数可能较少
false:可选参数,默认false指定各元素的下标重新索引为索引数组;true指定各元素保留原下标或键名
例:
$arr=array("username"=>"autumn","age"=>25,"a","b","sex"=>true,"c","d");
print_r(array_chunk($arr,2,false));
//Array([0]=>Array([0]=>autumn[1]=>25)[1]=>Array([0]=>a[1]=>b)[2]=>Array([0]=>1[1]=>c)[3]=>Array([0]=>d))
print_r(array_chunk($arr,2,true));
//Array([0]=>Array([username]=>autumn[age]=>25)[1]=>Array([0]=>a[1]=>b)[2]=>Array([sex]=>1[2]=>c)[3]=>Array([3]=>d))
array_slice($arr ,$start_num ,$length ,false):从一个数组中取出几个元素生成一个新的数组
$start_num:起始偏移量,从当前位置对应的元素向右取到结尾
$length:可选参数,为正数时表示要取的元素个数,为负数时表示取到从右向左的第几个元素,但不包括该对应元素
false:可选参数,默认false对数组元素的数字下标重新索引;true指定保留原下标
例:
$arr=array("a","username"=>"autumn","age"=>25,"b","sex"=>true,"c","d");
print_r(array_slice($arr,1,3,false)); //Array([username]=>autumn[age]=>25[0]=>b)
print_r(array_slice($arr,1,3,true)); //Array([username]=>autumn[age]=>25[1]=>b)
print_r(array_slice($arr,-5,-3,true)); //Array([age]=>25[1]=>b)
list("var1" ,"var2" ...)=$arr:将数组中对应位置的键值赋给某变量,不想取出该位置的键值的话该处变量为空即可(该函数仅对索引数组有效,且要求下标连续)
例:
$arr=array("autumn",25,"china",true);
list($username,$age,,$sex)=$arr;
echo $username; //autumn
echo $sex; //1
输出数组中各个元素的键值对:
$arr=array("a","b","c","d");
while(list($key,$val)=each($arr)){
echo $key,"--",$val,"<hr/>";
}
$arr=array("a","b","c","d");
while(current($arr)!==false){
echo key($arr)."--".current($arr)."<br/>";
next($arr);
}
array_shift($arr):取出数组的第一个元素,输出取出的元素的键值,数组本身也会受影响而少去第一个元素,后面的元素前移一位,数字下标重新索引,字符键名不变
例:
$arr=array("a","b","username"=>"autumn","age"=>25,6=>"c","d");
var_dump(array_shift($arr)); //string(1) "a"
print_r($arr); //Array([0]=>b[username]=>autumn[age]=>25[1]=>c[2]=>d)
array_pop($arr):取出数组的最后一个元素,输出取出的元素的键值,数组本身也会受影响而少去最后一个元素,但不影响前面元素的位置,下标键名不变
例:
$arr=array("a","b","username"=>"autumn","age"=>25,6=>"c","d");
var_dump(array_pop($arr)); //string(1) "d"
print_r($arr); //Array([0]=>a[1]=>b[username]=>autumn[age]=>25[6]=>c)
array_unshift($arr ,$var1 ,$var2 ...):向数组的开头插入一个或多个元素,输出数组中元素的个数,插入后数组的数字下标重新索引,字符键名不变
例:
$arr=array("a","b","username"=>"autumn","age"=>25,6=>"c","d");
$var1=array("e","f","sex"=>true);
$var2="g";
echo array_unshift($arr, $var1, $var2); //8
print_r($arr);
//Array([0]=>Array([0]=>e[1]=>f[sex]=>1)[1]=>g[2]=>a[3]=>b[username]=>autumn[age]=>25[4]=>c[5]=>d)
array_push($arr ,$var1 ,$var2 ...):向数组的末尾插入一个或多个元素,输出数组中元素的个数,数组本身的下标键值不受影响,插入后的元素下标按原数组下标规则依次向后添加
例:
$arr=array("a","b","username"=>"autumn","age"=>25,6=>"c","d");
$var1=array("e","f","sex"=>true);
echo array_push($arr,$var1); //7
print_r($arr); //Array([0]=>a[1]=>b[username]=>autumn[age]=>25[6]=>c[7]=>d[8]=>Array([0]=>e[1]=>f[sex]=>1))
3、数组的比较
array_diff($arr1 ,$arr2 ...):以数组方式输出$arr1中与其它数组中不同的元素,原下标键名保留不变
例:
$arr1=array("a","b","c","username"=>"autumn","age"=>25,"d");
$arr2=array("c","e","f","age"=>18,"sex"=>true);
$arr3=array("b","c","addr"=>"china");
$arr=array_diff($arr1,$arr2,$arr3);
print_r($arr); //Array([0]=>a[username]=>autumn[age]=>25[3]=>d)
array_intersect($arr1 ,$arr2 ...):以数组方式输出$arr1中与其它数组中相同的元素,原下标键名保留不变
例:
$arr1=array("a","b","c","username"=>"autumn","age"=>25,"d");
$arr2=array("c","e","f","age"=>"25","sex"=>true);
$arr3=array("b","c","age"=>"25","addr"=>"china");
$arr=array_intersect($arr1,$arr2,$arr3);
print_r($arr); //Array([2]=>c[age]=>25)
4、数组的查找和替换
array_search($search ,$arr ,false):在数组$arr中查找给定的值$search,查找到则输出对应键名,未找到则返回false
$search:当要查找的值为字符串时要区分大小写
false:可选参数,默认值,若为true则要求查找比对的值和类型全等
例:
$arr=array("a","b","username"=>"autumn","sex"=>true,$arr1);
var_dump(array_search("b",$arr)); //int(1)
var_dump(array_search("true",$arr)); //string(3)"sex"
var_dump(array_search("true",$arr,true)); //bool(false)
in_array($search ,$arr ,false):在数组$arr中查找给定的值$search,查找到则返回true,未找到则返回false
$search:当要查找的值为字符串时要区分大小写
false:可选参数,默认值,若为true则要求查找比对的值和类型全等
array_key_exists($key ,$arr):查找数组$arr中是否存在为$key的键名或下标,找到返回true,未找到返回false
array_splice($arr ,$start_num ,$length ,$replace):将数组中的部分元素去除,并用其他元素替换
$start_num:起始偏移量,从当前位置对应元素开始向右的元素都删除
$length:可选参数,为正数时表示要删除的元素个数,为负数时表示删除到从右向左的第几个元素,但不包括该位置元素
$replace:可选参数,指定替换进来的元素(仅会将$replace的键值替换进来,键名不保留),当$start_num和$length组合的结果不会去除任何元素时,$replace的元素插入到当前$start_num对应的元素之前(数组的中间插入)
例:
$arr=array("a","b","username"=>"autumn","age"=>25,6=>"c","d");
array_splice($arr,-4); array_splice($arr,-3,-1);
print_r($arr); //Array([0]=>a[1]=>b) print_r($arr); //Array([0]=>a[1]=>b[username]=>autumn[2]=>d)
$arr=array("a","b","username"=>"autumn","age"=>25,6=>"c","d");
$replace=array("addr"=>"china","e","sex"=>true);
array_splice($arr,1,0,$replace);
print_r($arr); //Array([0]=>a[1]=>china[2]=>e[3]=>1[4]=>b[username]=>autumn[age]=>25[5]=>c[6]=>d)
5、数组的指针操作
key($arr):返回数组中指针当前所在位置的下标键名
current($arr):得到数组指针所在位置的元素的键值,首次默认指针在第一个元素位置
next($arr):将数组指针向下移动1位,并返回对应元素的键值
prev($arr):将数组指针向上移动1位,并返回对应元素的键值
end($arr):返回数组最后一个元素的键值
reset($arr):重置数组指针,将指针移动到数组的第1个元素位置,并返回对应元素的键值
each($arr):返回数组中指针所在当前位置的键值和键名的混合数组,每each一次会将指针向下移动一位
例:
$arr=array("a","b","username"=>"autumn",array("c","d","e"),"age"=>25);
var_dump(key($arr)); //int(0)
var_dump(current($arr)); //string(1) "a"
var_dump(next($arr)); //string(1) "b"
next($arr);
var_dump(next($arr)); //array(3){[0]=>string(1)"c"[1]=>string(1)"d"[2]=>string(1)"e"}
var_dump(prev($arr)); //string(6) "autumn"
var_dump(end($arr)); //int(25)
var_dump(reset($arr)); //string(1) "a"
$arr1=each($arr);
print_r($arr1); //Array([1]=>a[value]=>a[0]=>0[key]=>0)
var_dump(current($arr)); //string(1) "b"
6、数组的键名、键值操作
array_keys($arr ,$val ,false):以索引数组方式输出数组$arr中各元素的键名
$val:可选参数,指定键值,只有键值为该值的对应元素的键名才会输出
false:可选参数,默认值,当为true时会严格比对元素的键值与$val指定键值类型是否全等
例:
$arr=array("a","b","username"=>"autumn","age"=>25,6=>"c","d","sex"=>true);
print_r(array_keys($arr)); //Array([0]=>0[1]=>1[2]=>username[3]=>age[4]=>6[5]=>7[6]=>sex)
print_r(array_keys($arr,"autumn")); //Array([0]=>username[1]=>sex)
print_r(array_keys($arr,"autumn",true)); //Array([0]=>username)
array_values($arr):以索引数组方式输出数组$arr中各元素的键值
例:
$arr=array("a","b","username"=>"autumn","age"=>25,6=>"c","d","sex"=>true);
print_r(array_values($arr)); //Array([0]=>a[1]=>b[2]=>autumn[3]=>25[4]=>c[5]=>d[6]=>1)
shuffle($arr):将数组中的各元素键值随机打乱,并将键名重新索引成数字下标,打乱成功返回true,失败返回false
例:
$arr=array("a","b","username"=>"autumn","age"=>25,6=>"c","d","sex"=>true);
var_dump(shuffle($arr)); //bool(true)
print_r($arr); //Array([0]=>b[1]=>d[2]=>a[3]=>c[4]=>25[5] =>autumn[6]=>1)
array_flip($arr):将数组中各元素的键名和对应键值反转,键名作键值,键值作键名,成功则输出反转后的数组,失败则返回NULL
注:反转前的键值须为整型或字符串型才能反转成功;若反转后出现键名相同的情况,后者的键值替换前者;
例:
$arr=array("a","b","username"=>"autumn","age"=>25,6=>"c","d","id"=>25);
print_r(array_flip($arr)); //Array([a]=>0[b]=>1[autumn]=>username[25]=>id[c]=>6[d]=>7)
array_reverse($arr ,false):将数组中从左到右的各元素按从右向左的顺序反向后输出
false:可选参数,默认值,反向后的数组各元素数字下标重新索引,字符键名保持不变;若为true则保持各元素的原下标键名不变
例:
$arr=array("a","b","username"=>"autumn","age"=>25,6=>"c","d");
print_r(array_reverse($arr)); //Array([0]=>d[1]=>c[age]=>25[username]=>autumn[2]=>b[3]=>a)
print_r(array_reverse($arr,true)); //Array([7]=>d[6]=>c[age]=>25[username]=>autumn[1]=>b[0]=>a)
array_count_values($arr):统计数组中所有的键值出现的次数,以关联数组的形式输出,键值作为关联数组的键名,键值出现的次数作为关联数组的键值
例:
$arr=array("a","b","username"=>"autumn","age"=>25,6=>"c","a");
print_r(array_count_values($arr)); //Array([a]=>2[b]=>1[autumn]=>1[25]=>1[c]=>1)
array_rand($arr ,$num):随机从数组$arr中取出$num个元素的下标键名
$num:可选参数,默认为1,其值大于1而小于数组中元素的个数时,取出的下标键名以索引数组形式输出
例:
$arr=array("a","b","username"=>"autumn","age"=>25,6=>"c","d");
var_dump(array_rand($arr)); //string(3) "age"
var_dump(array_rand($arr,3)); //array(3) {[0]=>int(1)[1]=>string(3)"age"[2]=>int(6)}
array_unique($arr):去除数组中键值相同的元素,先出现的保留
例:
$arr=array("a","b","username"=>"autumn","age"=>25,6=>"c","a","ip"=>25);
print_r(array_unique($arr)); //Array([0]=>a[1]=>b[username]=>autumn[age]=>25[6]=>c)
array_sum($arr):输出数组中所有元素键值的加和,仅对键值为数值类型的元素有效
例:
$arr=array(2,4,"a"=>1.5,"username"=>"autumn","age"=>25);
var_dump(array_sum($arr)); //float(32.5)
7、数组的排序
sort($arr ,SORT_REGULAR):将数组中的键值进行升序排序,并将该数组重新索引为新的索引数组,原下标键名不保留,成功返回true,失败返回false
SORT_REGULAR:可选参数,默认值,正常比较元素,不改变类型,包括:
SORT_NUMERIC:元素被作为数字来比较
SORT_STRING:元素被作为字符串来比较
SORT_LOCALE_STRING:根据当前的区域设置来把单元当作字符串比较
SORT_NATURAL:和函数natsort()类似,以自然顺序来比较排序
SORT_FLAG_CASE:不区分大小地排序字符串,可与SORT_STRING或SORT_NATURAL联用
例:
$arr=array("a","username"=>"autumn","b","age"=>25,"c",10,"D");
var_dump(sort($arr)); //bool(true)
print_r($arr); //Array([0]=>D[1]=>a[2]=>autumn[3]=>b[4]=>c[5]=>10[6]=>25)
rsort($arr ,SORT_REGULAR):将数组中的键值进行降序排序,并将该数组重新索引为新的索引数组,原下标键名不保留,成功返回true,失败返回false
例:
$arr=array("a","username"=>"autumn","b","age"=>25,"c",10,"D");
var_dump(rsort($arr)); //bool(true)
print_r($arr); //Array([0]=>25[1]=>10[2]=>c[3]=>b[4]=>autumn[5]=>a[6]=>D)
asort($arr ,SORT_REGULAR):将数组中的各元素按键值进行升序排序,保留原下标键名不变,成功返回true,失败返回false
例:
$arr=array("a","username"=>"autumn","b","age"=>25,"c",10,"D");
var_dump(asort($arr)); //bool(true)
print_r($arr); //Array([4]=>D[0]=>a[username]=>autumn[1]=>b[2]=>c[3]=>10[age]=>25)
arsort($arr ,SORT_REGULAR):将数组中的各元素按键值进行降序排序,保留原下标键名不变,成功返回true,失败返回false
例:
$arr=array("a","username"=>"autumn","b","age"=>25,"c",10,"D");
var_dump(arsort($arr)); //bool(true)
print_r($arr); //Array([age]=>25[3]=>10[2]=>c[1]=>b[username]=>autumn[0]=>a[4]=>D)
ksort($arr ,SORT_REGULAR):将数组中的各元素按键名进行升序排序,成功返回true,失败返回false(用于关联数组)
例:
$arr=array("d"=>2,"b"=>4,"a"=>6,"c"=>8);
var_dump(ksort($arr)); //bool(true)
print_r($arr); //Array([a]=>6[b]=>4[c]=>8[d]=>2)
krsort($arr ,SORT_REGULAR):将数组中的各元素按键名进行降序排序,成功返回true,失败返回false(用于关联数组)
例:
$arr=array("d"=>2,"b"=>4,"a"=>6,"c"=>8);
var_dump(krsort($arr)); //bool(true)
print_r($arr); //Array([d]=>2[c]=>8[b]=>4[a]=>6)
natsort($arr):将数组中的各元素按键值的自然顺序算法进行升序排序,保留原下标键名不变,成功返回true,失败返回false
例:
$arr=array("a","username"=>"autumn","b","age"=>25,"c",10,"D");
var_dump(natsort($arr)); //bool(true)
print_r($arr); //Array([3]=>10[age]=>25[4]=>D[0]=>a[username]=>autumn[1]=>b[2]=>c)
natcasesort($arr):将数组中的各元素按键值的自然顺序算法不区分大小写地进行升序排序,保留原下标键名不变,成功返回true,失败返回false
例:
$arr=array("a","username"=>"autumn","b","age"=>25,"c",10,"D");
var_dump(natcasesort($arr)); //bool(true)
print_r($arr); //Array([3]=>10[age]=>25[0]=>a[username]=>autumn[1]=>b[2]=>c[4]=>D)
8、数组的序列化
serialize($arr):对数组进行序列化,返回序列化之后的字符串
例:
$arr=array("a","b",array("username"=>"autumn","age"=>25,"sex"=>true),10,20);
$str=serialize($arr);
echo $str; //a:5:{i:0;s:1:"a";i:1;s:1:"b";i:2;a:3:{s:8:"username";s:6:"autumn";s:3:"age";i:25;s:3:"sex";b:1;}i:3;i:10;i:4;i:20;}
unserialize($arr):将序列化之后的字符串反序列化为数组
例:
$str='a:5:{i:0;s:1:"a";i:1;s:1:"b";i:2;a:3:{s:8:"username";s:6:"autumn";s:3:"age";i:25;s:3:"sex";b:1;}i:3;i:10;i:4;i:20;}';
print_r(unserialize($str));
//Array([0]=>a[1]=>b[2]=>Array([username]=>autumn[age]=>25[sex]=>1)[3]=>10[4]=>20)