您的位置:首页 > 其它

(34)数组的相关处理函数(上)(35)常用的数组相关操作函数(下)

2012-07-23 22:56 495 查看
(34)数组的相关处理函数

一 数组键/值操作有关的函数

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);

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: