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

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














评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值