一 数组键/值操作有关的函数
1. array_values() //返回数组内所有的元素
$lamp=array("os"=>"linux","webserver"=>"Apache", "db"=>"MySqL", "laguage"=>"php");
$arr=array_values($lamp);
echo '<pre>';
print_r($arr);
echo '</pre>';
还可以
$lamp=array("os"=>"linux", "webserver"=>"Apache", "db"=>"MySqL", "laguage"=>"php");
$arr=array_values($lamp);
list($os, $wb, $db, $lang)=$arr;
echo $os."<br>";
echo $wb."<br>";
echo $db."<br>";
echo $lang."<br>"; //一个一个输出
echo '<pre>';
print_r($arr);
echo '</pre>';
2. array_keys() //有一个固定参数,有两个可选参数
$lamp=array("os"=>"linux", "webserver"=>"Apache", "db"=>"MySqL","laguage"=>"php");
$arr=array_keys($lamp); //可选参数都不给出,默认的是输出所有键。而不输出值
echo '<pre>';
print_r($arr);
echo '</pre>';
若我们给出第二个参数,例如:
$arr=array_keys($lamp, "MySql");
则输出db
例如:
$lamp=array("os"=>"linux", "webserver"=>"Apache", "db"=>"MySql", "laguage"=>"php", "html"=>"100");
$arr=array_keys($lamp, "100", true); //100不加引号就是数字一百,加上引号就是参数。若前后两个100对应不起来,比如前面的加“”后面的没加,那么也不会输出。
echo '<pre>';
print_r($arr);
echo '</pre>
3. in_array() //一共三个参数,在第二个里面搜索第一个,看是值是否存在数组中
例如:
$lamp=array("os"=>"linux", "webserver"=>"Apache", "db"=>"MySql", "laguage"=>"php", "html"=>"100", array("a", "b"));
if(in_array(array("a", "b"), $lamp)){ //array("a", "b")与array("b", "a")的下标是不一样的
echo "exists";
}else{
echo "not exists";
}
再例如:
$lamp=array("os"=>"linux", "webserver"=>"Apache", "db"=>"MySql", "laguage"=>"php", "html"=>"100", array("a", "b"));
if(in_array("100", $lamp, true)){
echo "exists";
}else{
echo "not exists";
}
4. array_key_exists //看看下标是否存在数组中
5.array_flip -- 交换数组中的键和值
$lamp=array("os"=>"linux", "webserver"=>"Apache", "db"=>"MySql", "laguage"=>"php", "html"=>"100", 10=>"linux"); //值可以重复,下标不可以重复。
$arr=array_flip($lamp); //切换后值会变成键,重复的值变成重复的键,键是不允许重复的,所以会被覆盖
echo '<pre>';
print_r($arr);
echo '</pre>';
6. array_reverse -- 返回一个单元顺序相反的数组
$lamp=array("os"=>"linux", "webserver"=>"Apache", "db"=>"MySql", "laguage"=>"php", "html"=>"100", 10=>"linux");
$arr=array_reverse($lamp); //把元素对调或倒序
echo '<pre>';
print_r($arr);
echo '</pre>';
二、 统计数组元素的个数和惟一性的一些函数
1. count() sizeof(); //这两个函数是一样的作用,统计数组元素的个数。count()有第二个参数,分为0、1.0的话就不统计递归函数的深层元素的个数。1就是要统计深层递归函数的元素个数。
例如:
$lamp=array("os"=>"linux", "webserver"=>"Apache", "db"=>"MySql", "laguage"=>"php", "html"=>"100", 10=>"linux", array(1, 2, 3,4,5,6,7));
echo count($lamp, 1); //第二个参数为0那么输出7.第二个参数为1的时候,输出14.
echo '<pre>';
print_r($arr);
echo '</pre>';
2. array_count_values -- 统计数组中所有的值出现的次数
函数中的参数就会变为键名,而值是值在数组中出现的次数。
3. array_unique -- 移除数组中重复的值
三、使用回调函数处理数组的函数
1. array_filter() 用回调函数过滤数组中的单元 ,有一个自定义函数就有一个对应的参数,如果返回真就留下,如果返回假就排除。
$arr=array(1,2,3,4,5,-6,7,7,8,8,-9,9,10,11,-12);
$arr1=array_filter($arr, "myfun"); //过滤的数组自己定义的函数
function myfun($n){
if($n>0)
return true;
else
return false;
}
echo '<pre>';
print_r($arr1);
echo '</pre>';
再例如:
$arr=array(1,2,3,4,5,-6,7,7,8,8,-9,9,10,11,-12);
$arr1=array_filter($arr, "myfun");
function myfun($n){
if($n%2==0)
return true;
else
return false;
}
echo '<pre>';
print_r($arr1);
echo '</pre>';
2. array_walk() 数组中的每个成员应用用户函数
$lamp=array("os"=>"linux", "wb"=>"apache", "db"=>"mysql", "la"=>"php");
array_walk($lamp, "myfun1"); //会执行四次,下标传给第二个参数,值传给第一个参数
function myfun1($value, $key){
echo "The key '{$key}' has the value '$value' <br>";
} //为了突出我们可以加单引号
echo '<pre>';
print_r($arr1);
echo '</pre>';
再例如
$lamp=array("os"=>"linux", "wb"=>"apache", "db"=>"mysql", "la"=>"php");
array_walk($lamp, "myfun1", "========"); //可以有第三个参数
function myfun1($value, $key, $p){
echo "The key '{$key}' has {$p} '$value' <br>";
}
echo '<pre>';
print_r($arr1);
echo '</pre>';
3. array_map() 将回调函数作用到给定数组的单元上
$lamp=array("os"=>"linux", "wb"=>"apache", "db"=>"mysql", "la"=>"php");
$lp=array("os"=>"window", "wb"=>"apache", "db"=>"oracle", "la"=>"php");
$arr=array_map("myfun1", $lamp, $lp);
function myfun1($n, $t){
if($n==$t){
return "same";
}
return "different";
}
echo '<pre>';
print_r($arr);
echo '</pre>';
$lamp=array("os"=>"linux", "wb"=>"apache", "db"=>"mysql", "la"=>"php");
$lp=array("os"=>"window", "wb"=>"apache", "db"=>"oracle", "la"=>"php");
$arr=array_map("myfun1", $lamp, $lp);
function myfun1($n, $t){
if($n==$t){
return "same";
}
return "different";
}
echo '<pre>';
print_r($arr);
echo '</pre>';
(35)常用的数组相关操作函数(下)
一、数组的排序函数
sort()
rsort()
usort()
asort()
arsort()
uasort()
ksort()
krsort()
uksort()
natsort()
natcasesort()
array_multisort()
1. 简单的数组排序
sort() rsort() //会进行数字重新索引排序
$data=array(5,8,1, 7,2);
sort($data); //由小到大排序
print_r($data);
rsort($data); //由大到小排序
print_r($data);
2. 根据键名对数组排序
ksort() krsort() //根据键名进行排序
例如:
$data=array(5=>"five",8=>"eight",1=>"one", 7=>"seven",2=>"two");
ksort($data);
print_r($data);
krsort($data);
print_r($data);
3. 根据元素的值对数组排序
asort() arsort() //保留原有键名和值的关系
4. 根据“自然数排序”法对数组排序
natsort() natcasesort()
5. 根据用户自定义规则对数组排序
usort() uasort() uksort()
$lamp=array("Linux", "Apache", "MySQL","PHP");
usort($lamp, "sortbylen"); //根据值的长度来排序
function sortbylen($one, $two){
if(strlen($one)==strlen($two))
return 0;
else
return (strlen($one)<strlen($two))?1:-1; //利用1、0、-1的方法来排序
}
print_r($lamp);
echo '<br>';
6.多维数组的排序
array_multisort
二、拆分、合并、分解、接合的数组函数//可以完成数组的差积、或取其部分
1. array_slice() //在数组中根据条件取出部分的函数,如果数组有字符串,也就是关联数
组,那么数组保留键名,有四个参数。第一个是要处理的数组,第二个参数要给出一个数值规定函
数在哪里开始取,正数从前往后取,负数从后往前取。第三个参数是可选的,规定被返回数组的长
度,正数从前往后取,负数从后往前取绝对值的元素个数,不设定则全部返回。第四个参数也是可
选的,如果是真则保留键名,如果是假,则重新设置键名。如果数组有字符串的键,则将保留数组
键名。
例如:
$lamp=array("Linux", "Apache", "MySQL", "PHP");
print_r(array_slice($lamp, 1,2)); //0:Apache 1:MySQL
echo '<br>';
print_r(array_slice($lamp, -2,1)); //0:MySQL
echo '<br>';
print_r(array_slice($lamp, 1,2, true)); //1:Apache 2:MySQL
echo '<br>';
2.array_splice();//与第一个函数类似,但是它不返回,而是删除,第四个参数会有元素来替
代它们。
3. array_combine(); //通过合并两个数组来创建数组,一个数组是作为键名,另一个数组是
用值作为键值。如果一个数组为空或者两个数组的元素个数不同,这个数组就会返回假。
例如: $a1=array("OS", "WebServer", "DataBase", "Language");
$a2=array("Linux", "Apache", "MySQL", "PHP");
print_r(array_combine($a1, $a2)); //有两个参数,第一个是作为键名的数组名,第二个是
作为键值的数组名。
echo '<br>';
print_r(array_combine($a2, $a1));
echo '<br>';
4. array_merge(); //将两个或多个数组合并为一个。如果键名有重复,则根据最后一个键名的
值定义,后面的覆盖前面的。如果数组是以数字索引,则键名会以连续的重复索引联在一起。
例如:$a1=array("OS", "WebServer", "DataBase", "Language");
$a2=array("Linux", "Apache", "MySQL", "PHP");
$a3=$a1-$a2;//后面的数组会覆盖前面的数组,因为它们的键名相同,如果在$a2前面建一个数字
元素,那么所有数组就输出来。键名不相同。
print_r($a3);
5. array_intersect(); //计算两个或多个数组之间有什么交集
例如:$a1=array("OS", "WebServer", "DataBase", "Language",1,3,4,5,6,78);
$a2=array("Linux", "Apache", "MySQL", "PHP",5,78);
$a3=array_intersect($a1,$a2); //5、78
print_r($a3);
echo '<br>';
6. array_diff()
例如:$a1=array("OS", "WebServer", "DataBase", "Language",1,3,4,5,6,78);
$a2=array("Linux", "Apache", "MySQL", "PHP",5,78);
$a3=array_diff($a1,$a2); //5、78
print_r($a3);
echo '<br>';
三、数组与数据结构的函数 //通常是以容器来存储任意数据的数组,并且根据存储的数组来决定
容器的容量,容器可以变长,在同一个数组中可以存储多重类型的数据,PHP中没有长度限制。
1、使用数据实现堆栈
array_push()
array_pop()
什么是栈,我们把栈比作一个容器弹夹,最后放进去的子弹(数据)会被最先发射出来。最上面是
栈顶。我们进栈称作压入栈,出栈称作弹出栈,也叫做入栈、出
$a1=array("OS", "WebServer", "DataBase", "Language");
$a1[]="one"; //压入栈
$a1[]="two";
array_push($a1, "three"); //利用函数压入栈,但是最常用的还是上面的方法,直接压入。
array_push($a1, "four", "five"); //可以一个压入多个元素
$value=array_pop($a1); //弹出栈,弹出一个少一个
$value=array_pop($a1);
print_r($a1);
echo '<br>';
echo $value;
2. 使用队列
array_unshift()
array_shift()
unset() //任意删除
什么是队列呢,队列是先进先出,后进后出。最先进入队列的最先被释放。
array_unshift($a1,www); //在数组首位压入,也就是队列压入
array_unshift($a1,aa);
array_shift($a1); //在数组首位删除,每次删除一个。
array_shift($a1);
列表是在任意地方进入,在任意地方取出
四、其它与数据操作有关的函数
1、array_rand(); //随机取出数组中的值
例如:
$arr=array(1,3,4,5,76,7,98,5,9,4,3,3,2,2,22,21);
echo array_rand($arr); //随机取出下标
echo $arr[array_rand($arr)]; //随即取出键值
2、shuffle() //将数组中元素按随机顺序重新排列,相当于洗牌
$arr=array(1,3,4,5,76,7,98,5,9,4,3,3,2,2,22,21);
shuffle($arr); //对原数组进行排序
print_r($arr);
3、array_sum() //对数组元素进行求和
例如:
$arr=array(1,3,4,5,76,7,98,5,9,4,3,3,2,2,22,21);
echo array_sum($arr);
4、range() //创建并指定了一个包含元素范围的数组,有三个参数,第一个参数是规定数组
元素的最小值,第二个参数是规定数组元素的最大值。第三个参数是规定数组元素的长度步长,两
个数相差多少。
例如:$arr=range("a","f");
print_r($arr);
$arr=range(0,50,10); //从0到50间隔为10的数字。
print_r($arr);