<?php
//============================================================
//-----------------------数组指针-----------------------------
$people = array("Bill", "Steve", "Mark", "David");
echo current($people) . "<br>"; // 当前元素是 Bill
echo next($people) . "<br>"; // Bill 的下一个元素是 Steve
echo current($people) . "<br>"; // 现在当前元素是 Steve
echo prev($people) . "<br>"; // Steve 的上一个元素是 Bill
echo end($people) . "<br>"; // 最后一个元素是 David
echo prev($people) . "<br>"; // David 之前的元素是 Mark
echo current($people) . "<br>"; // 目前的当前元素是 Mark
echo reset($people) . "<br>"; // 把内部指针移动到数组的首个元素,即 Bill
echo next($people) . "<br>"; // Bill 的下一个元素是 Steve
print_r (each($people)); // 返回当前元素的键名和键值(目前是 Steve),并向前移动内部指针
//==========================================================
//-----------------------转换为索引数组--------------------
//传入数组返回索引数组
$arr=array_values(array())
//------------------------------------------------------
//-------------------将数组值赋给变量------------------
list($a,$b)=array("a","b");
echo $a,$b;
//------------------------------------------------------
//-------------------返回数组的键名--------------------
$arr=("a"=>"one","b"=>100,"c"=>"100");
//返回数组所有键名
$arr=array_keys($arr);
/* Array ( [0] => a [1] => b [2] => c ) */
//返回指定数组值的键名
$arr=array_keys($arr,"one"); //返回 a
//返回键名时严格按类型如 100 与 "100"
$arr=array_keys($arr,"100",true);
//------------------------------------------------------
//-----------------判断键名是否在数组------------------
$arr=array("one","two","three");
if(in_array("one",$arr)){
echo "exists";
}else{
echo "not exists";
}
//第三个参数:严格按类型判断
in_array("one",$arr,true);
//------------------------------------------------------
//---------------判断数组中是否有该键名----------------
//判断键名是否在数组中
$arr = array("one"=>"111","two"=>"222");
if(array_key_exists("one",$arr)){
echo "ok";
}
//------------------------------------------------------
//----------------交换数组中的键和值-------------------
$arr=array("a"=>"one","b"=>"two","c"=>"three");
$arr=array_flip($arr);
/* Array ( [one] => a [two] => b [three] => c ) */
//如果有两值相同则
$arr=array("a"=>"one","b"=>"two","c"=>"two");
$arr=array_flip($arr);
/* Array ( [one] => a [two] => c ) */
//------------------------------------------------------
//----------------将数组元素顺序颠倒-------------------
$arr=array("a"=>"one","b"=>"two","c"=>"three");
$arr=array_reverse($arr);
/* Array ( [c] => three [b] => two [a] => one ) */
//=======================统计数组相关======================
//----------------------统计数组元素-----------------------
//统计数组元素
count(); //别名sizeof();
$arr=array("a"=>"one","b"=>"two",array(1,2,3,4,5,6));
//默认统计第一纬的数组
count($arr);
//传入第二个参数时统计多维数组
count($arr,1);
//------------------------------------------------------
//------------统计数组中各个值出现的次数--------------
$arr=array("one","two","one","three");
$arr=array_count_values($arr);
/* Array ( [one] => 2 [two] => 1 [three] => 1 ) */
//------------------------------------------------------
//---------------移除数组中重复的值--------------------
$arr=array("one","two","one","three");
$arr=array_unique($arr);
/* Array ( [0] => one [1] => two [3] => three ) */
//===================使用回调函数处理数组==================
//----------------------------------------------------------
$arr=array(1,2,3,4,-5,6,-7,8,-9);
//自定义回调函数
$arr=array_filter($arr,"fun");
//用此函数过滤掉负数
function fun($n){
if($n>0)
return true;
else
return false;
}
/* Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [5] => 6 [7] => 8 )*/
//用此函数取出偶数
function fun1($n){
if($n%2==0)
return true;
else
return false;
}
/*Array ( [1] => 2 [3] => 4 [5] => 6 [7] => 8 )*/
//------------------------------------------------------
//---------对数组中的每个成员用回调函数处理-----------
$arr=array("a"=>"one","b"=>"two","c"=>"three");
//参数:数组,回调函数,任意值(可选)
array_walk($arr,"fun","=>");
//回调函数,第一个传值,第二个传键名
function fun($value,$key){
echo "key ".$key." value ".$value."<br>";
}
//传入第三个值$p
function fun($value,$key,$p){
echo $key.$p.$value."<br>";
}
//输入应用
array_walk($arr,"fun");
function fun(&$value,$key){
$value="hello";
}
print_r($arr);
/*Array ( [a] => hello [b] => hello [c] => hello )*/
//------------------------------------------------------
//------------------------------------------------------
$arr=array("a","b","c","d");
/*依次将数组中的值都传入函数中,然后对每一个值进行处理后再返回*/
$arr=array_map("fun",$arr); //可传多个数组
function fun($n){
return "--".$n."--";
}
print_r($arr);
//Array ( [0] => --a-- [1] => --b-- [2] => --c-- [3] => --d-- )
//=========================数组排序=========================
//--------------------按键值对数组进行排序-----------------
//从小到大排序
$arr=array(5,6,8,2,4);
//直接将原数组排序
sort($arr); //升序
print_r($arr);
/*Array ( [0] => 2 [1] => 4 [2] => 5 [3] => 6 [4] => 8 )*/
//从大到小排序
rsort($arr); //降序
print_r($arr);
/*Array ( [0] => 8 [1] => 6 [2] => 5 [3] => 4 [4] => 2 )*/
//------------------------------------------------------
//-----------------按键名对数组排序--------------------
$arr=array(2=>"two",5=>"five",4=>"four");
ksort($arr); //升序
print_r($arr);
/*Array ( [2] => two [4] => four [5] => five )*/
krsort($arr); //降序
print_r($arr);
/* Array ( [5] => five [4] => four [2] => two )*/
//------------------------------------------------------
//------------------数组排序保留键名-------------------
//将数组进行排序,保留原始键名
$arr=array("1"=>"hello","two"=>"nihao","3"=>"funny");
asort($arr); //升序
print_r($arr);
/*Array ( [3] => funny [1] => hello [two] => nihao )*/
arsort($arr); //降序
print_r($arr);
/*Array ( [two] => nihao [1] => hello [3] => funny )*/
//------------------------------------------------------
//------------------按自然数排序-----------------------
$arr=array("one1","One2","one11","one22");
natsort($arr); //区分大小写
print_r($arr);
/*Array ( [1] => One2 [0] => one1 [2] => one11 [3] => one22 )*/
natcasesort($arr); //不区分大小写
print_r($arr);
/*Array ( [0] => one1 [1] => One2 [2] => one11 [3] => one22 )*/
//------------------------------------------------------
//----------------自定义规则对数组排序-----------------
$arr=array("Linux","Apache","MySQL","PHP");
usort($arr,"sortByLen"); //uasort() uksort()
//按字符串长度进行排序
function sortByLen($one,$two){
if(strlen($one)==strlen($two))
return 0;
else
return (strlen($one)>strlen($two))?1:-1;
}
print_r($arr);
/*Array ( [0] => PHP [1] => MySQL [2] => Linux [3] => Apache )*/
//多维数组排序
array_multisort();
//====================拆分合并分解接合数组=================
//------------------------截取数组--------------------------
$arr=array("Linux","Apache","MySQL","PHP");
//将数组从第一个开始取取出两个
$arr=array_slice($arr,1,2);
/*Array ( [0] => Apache [1] => MySQL )*/
//从倒数第二个开始取取两个
$arr=array_slice($arr,-2,2);
/*Array ( [0] => MySQL [1] => PHP )*/
//使用第三个参数保留原有下标
$arr=array_slice($arr,-2,2,true);
/*Array ( [2] => MySQL [3] => PHP )*/
//------------------------------------------------------
//------------------键名与键值组合---------------------
$arr=array("Linux","Apache","MySQL","PHP");
$arr1=array("one","two","three","four");
//第一个数组作为键名第二个数组作为键值
$arr=array_combine($arr1,$arr);
print_r($arr);
/*Array ( [one] => Linux [two] => Apache [three] => MySQL [four] => PHP )*/
//-------------------------------------------------------
//--------------------合并数组--------------------------
$arr=array("Linux","Apache","MySQL","PHP");
$arr1=array("one","two","three","four");
$arr=array_merge($arr,$arr1);
print_r($arr);
/*Array ( [0] => Linux [1] => Apache [2] => MySQL [3] => PHP
[4] => one [5] => two [6] => three [7] => four )*/
//------------------------------------------------------
//--------------------求数组交集-----------------------
$arr=array("Linux","Apache","MySQL","PHP");
$arr1=array("Linux","hello","java","PHP");
$arr=array_intersect($arr,$arr1);
print_r($arr);
/*Array ( [0] => Linux [3] => PHP )*/
//------------------------------------------------------
//--------------------求数组差集-----------------------
$arr=array("Linux","Apache","MySQL","PHP");
$arr1=array("Linux","hello","java","PHP");
$arr=array_diff($arr,$arr1);
print_r($arr);
/*Array ( [1] => Apache [2] => MySQL )*/
//====================删除数组中的元素=====================
//--------------------------unset---------------------------
$arr = array("one"=>"one","two"=>"222222","222");
unset($arr['one']);
print_r($arr);
/*Array ( [two] => 222222 [0] => 222 ) */
//------------------------------------------------------
//------------array_splice删除数组中元素---------------
/*删除用法:参数分别为:1.数组,2.开始删除的位置(数
组下标,从0开始,可正可负,负数则倒着数),3.删除的
个数(0为全部删除),并返回被删除的元素数组*/
$arr = array("one","two","three","four","five");
$arr1 = array_splice($arr,1,2);
print_r($arr1);
/*Array ( [0] => two [1] => three )*/
print_r($arr);
/*Array ( [0] => one [1] => four [2] => five )*/
//------------------------------------------------------
//------------array_splice替换数组中元素---------------
/*替换数组中的元素用法:参数分别为:1.被替换元素的数
组,2.开始替换的位置,3.替换的个数(0为全部替换),4.要
替换为的数组,返回被替换的数组*/
$arr1 = array("one","two","three","four","five");
$arr2 = array("xx","xxx");
$arr3 = array_splice($arr1,1,2,$arr2);
print_r($arr1);
/*Array ( [0] => one [1] => xx [2] => xxx [3] => four [4] => five )*/
print_r($arr3);
/*Array ( [0] => two [1] => three )*/
//====================数据结构的数组函数===================
//-----------------------数组实现栈-------------------------
//栈:先进先出
//入栈
$arr=array("MySQL","PHP");
array_push($arr,"one"); //向栈中压入数据
print_r($arr);
/*Array ( [0] => MySQL [1] => PHP [2] => one )*/
//出栈
$arr=array("MySQL","PHP","one");
$arr=array_pop($arr); //弹出栈中的数据
print_r($arr);
/* Array ( [0] => MySQL [1] => PHP )*/
//------------------------------------------------------
//--------------------数组实现堆-----------------------
//堆列:先进后出
$arr=array("MySQL","PHP");
array_unshift($arr,"one"); //压入的值再前面
print_r($arr);
/*Array ( [0] => one [1] => MySQL [2] => PHP )*/
//从堆头删除数据
$arr=array("MySQL","PHP","one");
array_shift($arr); //前面的值出堆
print_r($arr);
/*Array ( [0] => PHP [1] => one )*/
//删除数组中的任意值
$arr=array("MySQL","PHP","one");
unset($arr[1]);
print_r($arr);
/*Array ( [0] => MySQL [2] => one )*/
//===================其他数组操作函数======================
//-------------------随机从数组中取值----------------------
$arr=array(4,5,6,8,2,9,7,2,56,12,78,23);
//取出的是下标
$num=array_rand($arr);
print_r($arr[$num]); //数组下标所对应的值
//------------------------------------------------------
//----------------随机打乱数组元素顺序----------------
$arr=array(4,5,6,8,2,9,7,2,56,12,78,23);
//将原数组顺序随机打乱
shuffle($arr);
print_r($arr);
//------------------------------------------------------
//------------------对数组元素求和---------------------
$arr=array(4,5,6,8,2,9,7,2,56,12,78,23);
echo array_sum($arr);
//和为:212
//------------------------------------------------------
//------------创建一个包含指定范围的数组--------------
//参数:起始,结束,间隔
//对50从0开始裁剪,每10为一个
$arr=range(0,50,10);
print_r($arr);
/*Array ( [0] => 0 [1] => 10 [2] => 20 [3] => 30 [4] => 40 [5] => 50 )*/
$arr=range("a","k");
print_r($arr);
/*Array ( [0] => a [1] => b [2] => c [3] => d [4] => e )*/
//----------------------------------------------------------
//==========================================================
// *********************一、数组操作的基本函数*******************
// ***************************数组的键名和值***************************
array_search("apple",$arr) //在数组中检索apple ,如果存在返回键名
array_key_exists("apple",$arr)//检索给定的键名是否存在数组中
isset($arr[apple]) //检索给定的键名是否存在数组中
// ***************************数组的内部指针***************************
current($arr) //返回数组中的当前单元
pos($arr) //返回数组中的当前单元
key($arr) //返回数组中当前单元的键名
prev($arr) //将数组中的内部指针倒回一位
next($arr) //将数组中的内部指针向前移动一位
end($arr) //将数组中的内部指针指向最后一个单元
reset($arr) //将数组中的内部指针指向第一个单元
each($arr) //将返回数组当前元素的一个键名--值的构造数组,
//并使数组指针向前移动一位
// ***************************数组和变量之间的转换***************************
extract($arr) //用于把数组中的元素转换成变量导入到当前文件中,
//键名当作变量名,值作为变量值。
//注:(第二个参数很重要,可以看手册使用)
//使用方法 echo $a//
compact(var1,var2,var3) //用给定的变量名创建一个数组
// *********************二、数组的分段和填充***************************
// ***************************数组的分段***************************
array_slice($arr,0,3) //可以将数组中的一段取出,此函数忽略键名
array_splice($arr,0,3,array("black","maroon"))//可以将数组中的一段取出,
//与上个函数不同在于返回的序列从原数组
//中删除
// ***************************分割多个数组***************************
array_chunk($arr,3,TRUE) //可以将一个数组分割成多个,TRUE为保留原数组的键名
// ***************************数组的填充***************************
array_pad($arr,5,'x') //将一个数组填补到制定长度
// ***************************三、数组与栈***************************
array_push($arr,"apple","pear") //将一个或多个元素压入数组栈的末尾
//(入栈),返回入栈元素的个数
array_pop($arr) //将数组栈的最后一个元素弹出(出栈)
// ***************************四、数组与列队***************************
array_shift($arr) //数组中的第一个元素移出并作为结果返回
//(数组长度减1,其他元素向前移动一位,
//数字键名改为从零技术,文字键名不变)
array_unshift($arr,"a",array(1,2)) //在数组的开头插入一个或多个元素
// ***************************五、回调函数***************************
array_walk($arr,'function','words') //使用用户函数对数组中的每个成员
//进行处理(第三个参数传递给回调函数function)
array_map("function",$arr1,$arr2) //可以处理多个数组(当使用两个或更多数组时,
//他们的长度应该相同)
array_filter($arr,"function") //使用回调函数过滤数组中的每个元素,如果回调
//函数为TRUE,数组的当前元素会被包含在返回的
//结果数组中,数组的键名保留不变
array_reduce($arr,"function","*") //转化为单值函数(*为数组的第一个值)
// ***************************六、数组的排序***************************
// ***************************通过元素值对数组排序***************************
sort($arr) //由小到大的顺序排序(第二个参数为
//按什么方式排序)忽略键名的数组排序
rsort($arr) //由大到小的顺序排序(第二个参数为按
//什么方式排序)忽略键名的数组排序
usort($arr,"function") /*使用用户自定义的比较函数对数组中的
值进行排序(function中有两个参数,
0表示相等,正数表示第一个大于第二个,
负数表示第一个小于第二个)忽略键名的数组排序*/
asort($arr) /*由小到大的顺序排序(第二个参数
为按什么方式排序)保留键名的数组排序*/
arsort($arr) /*由大到小的顺序排序(第二个参数为按
什么方式排序)保留键名的数组排序*/
uasort($arr,"function") //使用用户自定义的比较函数对数组中的值
//进行排序(function中有两个参数,0表示相等,
//正数表示第一个大于第二个,负数表示第一个小
//于第二个)保留键名的数组排序
// ***************************通过键名对数组排序***************************
ksort($arr) //按照键名正序排序
krsort($arr) //按照键名逆序排序
uksort($arr,"function") //使用用户自定义的比较函数对数组中的
//键名进行排序(function中有两个参数,
//0表示相等,正数表示第一个大于第二个,
//负数表示第一个小于第二个)
// ***************************自然排序法排序***************************
natsort($arr) //自然排序(忽略键名)
natcasesort($arr) //自然排序(忽略大小写,忽略键名)
// ***************************七、数组的计算***************************
// ***************************数组元素的求和***************************
array_sum($arr) //对数组内部的所有元素做求和运算
// ***************************数组的合并***************************
array_merge($arr1,$arr2) //合并两个或多个数组(相同的字符串键名,
//后面的覆盖前面的,相同的数字键名,
//后面的不会做覆盖操作,而是附加到后面)
//“+”$arr1+$arr2 对于相同的键名只保留第一个
//(详细说明可参考:http://www.qianyunlai.com/blog/138.html)
array_merge_recursive($arr1,$arr2) //递归合并操作,如果数组中有相同的字符串键名,
//这些值将被合并到一个数组中去。如果一个值本
//身是一个数组,将按照相应的键名把它合并为另
//一个数组。当数组 具有相同的数组键名时,后一个
//值将不会覆盖原来的值,而是附加到后面
// ***************************数组的差集***************************
array_diff($arr1,$arr2) //返回差集结果数组
array_diff_assoc($arr1,$arr2,$arr3) //返回差集结果数组,键名也做比较
// ***************************数组的交集***************************
array_intersect($arr1,$arr2) //返回交集结果数组
array_intersect_assoc($arr1,$arr2) //返回交集结果数组,键名也做比较
// ***************************八、其他的数组函数***************************
range(0,12) //创建一个包含指定范围单元的数组
array_unique($arr) //移除数组中重复的值,新的数组中会保留原始的键名
array_reverse($arr,TRUE) //返回一个单元顺序与原数组相反的数组,如果
//第二个参数为TRUE保留原来的键名
//srand((float)microtime()*10000000)//随机种子触发器
array_rand($arr,2) //从数组中随机取出一个或 多个元素
shuffle($arr) //将数组的顺序打乱Array Function.php常用数组函数
选择阅读主题色