zoukankan      html  css  js  c++  java
  • PHP学习笔记04——数组

      1 <?php
      2     // 1.数组的声明,可以直接为数组元素赋值,也可以使用array函数声明数组
      3         /* 索引数组:下标从0开始,依次递增
      4          * 关联数组:字符串为下标
      5          * */
      6         //直接赋值声明数组,不需要先声明,使用ar[]将自动填写最大下标
      7     $array_cont1[0] = 1;
      8     $array_cont1[1] = 2;
      9     $array_cont1[] = 3;
     10     
     11         //调试程序时,可以使用print_r()或者var_dump()查看所有的元素
     12     print_r($array_cont1);
     13     echo "<br/>";
     14     var_dump($array_cont1);
     15     echo "<br/>";
     16     
     17         //也可以使用string以及混合下标来声明数组
     18     $array_cont2[0] = "aa";
     19     $array_cont2["ID"] = "bb";
     20     $array_cont2["NAME"] = "cc";
     21     print_r($array_cont2); 
     22     echo "<br/>";
     23     
     24         //使用array格式来声明数组
     25     $array_cont3 = array(1, 2, 3);
     26     $array_cont4 = array(0=>"aa", "ID"=>"bb", "NAME"=>"cc");
     27     print_r($array_cont3);
     28     echo "<br/>";
     29     print_r($array_cont4);
     30     echo "<br/>";
     31     
     32         //声明二维数组,使用方括号来声明和一维没什么不一样,这里使用array来声明一个二维数组
     33     $array_cont5 = array(
     34         "小三" => array(15, "A公司"),
     35         "小四" => array(20, "B公司")    
     36     );
     37     print_r($array_cont5);
     38     echo "<br/>";
     39     
     40     // 2.数组的遍历
     41         /* 数组的遍历有多种方法,这里主要介绍以下几种
     42          *  for循环,只能访问索引值全部为数字的数组,很少使用
     43          *  foreach循环,比较方便的一种访问方法
     44          *  使用list(),each()加while来遍历,类似于iterator
     45          *  使用数组内部指针访问
     46          */
     47         // 使用for循环,只能访问数组下标是连续数字的数组
     48     for( $i = 0; $i <count($array_cont1); $i++)
     49         echo $array_cont1[$i];
     50     echo "<br/>";
     51     
     52         // 使用foreach遍历,有两种方式,第一种只能访问value,第二种能访问key和value
     53     foreach ($array_cont2 as $value)
     54         echo $value;
     55     echo "<br/>";
     56     
     57     foreach ($array_cont2 as $key=>$value)
     58         echo $key."=>".$value." ";
     59     echo "<br/>";
     60 
     61         // 使用each()+list()+while()来访问,在之前最好调用以下reset将数组指针重新指向第一个元素
     62         // each()返回一个数组(0,1,key,value),其中0对应Key,1对应value,之后向后移动指针,到末尾返回FALSE
     63         // list()用于给一组变量赋值
     64     reset($array_cont2);
     65     while(list($key, $value) = each($array_cont2))
     66         echo $key."=>".$value." ";
     67     echo "<br/>";
     68         
     69         // 使用数组内部指针,有current(),key(),next(),prev(),end(),reset();
     70         // current()指向当前value,key()指向当前值,reset()重置到第一个元素
     71     reset($array_cont2);
     72     echo key($array_cont2)."=>".current($array_cont2)." ";
     73     next($array_cont2);
     74     echo key($array_cont2)."=>".current($array_cont2)." ";
     75     echo "<br/>";
     76     
     77     // 3. 预定义数组,PHP预定义的数组,又称为超全局变量,不需要使用global就可以全局访问
     78         /* 这里大致介绍有哪些预定义数组,在后面的章节有详细的介绍
     79          * $_SERVER    包含诸如头信息、路径和脚本位置的数组
     80          * $_ENV    包含PHP所在服务器的环境信息
     81          * $_GET    通过HTTP的GET方法传递的变量
     82          * $_POST    通过HTTP的POST方法传递的变量
     83          * $_REQUEST包含$_GET和$_POST和$_COOKIE种的所有内容,但速度比较慢,不提议使用
     84          * $_FILES    使用file域上传的文件内容,比较复杂
     85          * $_COOKIE        HTTP COOKIES
     86          * $_SESSION    HTTP SESSION
     87          * $_GLOBALS已经定义的全局变量组成的数组,用来取替global关键字
     88          * */
     89     print_r($_SERVER);echo "<br/>";
     90     print_r($_ENV);echo "<br/>";
     91     
     92     // 4. 数组的相关处理函数.PHP中有大量的数组处理函数,本节介绍一些常用函数
     93     echo "数组相关处理函数<br/>";
     94         /* 键值操作函数
     95          * array_values()    输出所有value,可用于将关联数组转化为索引数组
     96          * array_keys()        输出所有key,原型第二个参数用于搜索指定value的key,第三个参数代表是否进行全等匹配
     97          * in_array()        判断是否有某个value,第三个参数代表是否进行全等匹配
     98          * array_flip()        交换函数的key和value,返回交换后的数组,多个相同value取最后一个,注意值的数组类型只能是字符串或整数
     99          * array_reverse()    将数组元素顺序翻转
    100          * */
    101     
    102     print_r(array_values($array_cont2));    
    103     echo "<br/>";
    104     
    105     print_r(array_keys($array_cont2));        
    106     print_r(array_keys($array_cont2, "cc", true));
    107     echo "<br/>";
    108     
    109     var_dump(in_array("cc",$array_cont2, true));    
    110     var_dump(in_array("cd",$array_cont2, false));
    111     echo "<br/>";
    112     
    113     print_r(array_flip($array_cont2));
    114     echo "<br/>";
    115     
    116     print_r(array_reverse($array_cont2));
    117     echo "<br/><br/>";
    118     
    119         /* 统计数组元素的个数和唯一性
    120          * count()                统计数组元素的个数,第二个参数默认0,不检测多维数组的个数,为1时检测
    121          * array_count_values()    统计所有值出现的次数,返回一个数组
    122          * array_unique()        删除数组中重复的值,返回没有重复值的数组
    123          * */
    124     $array_cont6 = array(1, 1, 1, 2, 2, 2, 3, 3, 3);
    125     echo count($array_cont6)."<br/>";
    126     print_r(array_count_values($array_cont6));
    127     print_r(array_unique($array_cont6));
    128     echo "<br/><br/>";
    129     
    130         /* 使用回调函数处理数组的函数
    131          * array_filter()        返回按用户自定义函数过滤后的新函数
    132          * array_walk()            对数组中的每个元素用回调函数处理,成功返回true,否则返回false
    133          * array_map()            可处理多个数组,回调函数参数个数与数组数相同,并行处理所有数组,要保证传入数组个数相同,不足用空代替.返回字符串.
    134          */
    135     function filter_ar($var) {
    136         return $var % 2 == 0;
    137     }
    138     function walk_ar($value, $key) {        
    139         echo $key."=>".$value." ";
    140     }
    141     print_r(array_filter($array_cont6, 'filter_ar'));
    142     array_walk($array_cont6, "walk_ar");    //也可以传入第三个参数,作为相应回调函数的第三个参数
    143     echo "<br/>";
    144     function map_ar($s1, $s2) {
    145         return $s1 == $s2 ? 'ok' : 'nook';
    146     }
    147     $array_cont7 = array(2, 2, 2, 2, 2, 2, 3, 3, 3);
    148     print_r(array_map("map_ar", $array_cont6, $array_cont7));
    149     echo "<br/><br/>";
    150     
    151         /* 常用数组的排序函数
    152          * sort,rsort            原始的排序方式,加r是逆向排序,注意排序后会用数组重新索引下标,第一个参数为数组,第二个参数为排序方法,可选.
    153          * ksort,krsort            按键名进行排序,其它使用方法同sort
    154          * asort,kasort            按值进行排序,和sort使用方法类似与sort不同的是下标保持不变
    155          * 以上排序函数第二个参数可以是SORT_REGULAR(默认,自动识别),SORT_NUMERIC(数字),SORT_STRING(字符串),SORT_LOCALE_STRING(根据locale设置来把元素当作字符串比较)
    156          * usort,uasort,uksort    用户自定义排序方法,第二个参数是用户的回掉函数(回调函数返回True表示s1大于s2)
    157          * natsort,natcasesort    自然排序法排序,数字1-9、字母a-z、短者优先.natcasesort是忽视大小写的自然排序
    158          * array_multisort        多个数组或多维数组排序,传入多个数组,先按第一个数组来,再按第二个,类推.每个数组后都可以接order(SORT_ASC,SORT_DESC)和type参数(同sort).
    159          */
    160     $array_sort1 = array('b'=>2, 'a'=>1, 'c'=>3);
    161     sort($array_sort1);
    162     print_r($array_sort1);
    163     rsort($array_sort1);
    164     print_r($array_sort1);
    165     echo "<br/>";
    166     
    167     $array_sort1 = array('b'=>2, 'a'=>1, 'c'=>3);
    168     ksort($array_sort1);
    169     print_r($array_sort1);
    170     krsort($array_sort1);
    171     print_r($array_sort1);
    172     echo "<br/>";
    173     
    174     $array_sort1 = array('b'=>2, 'a'=>1, 'c'=>3);
    175     asort($array_sort1);
    176     print_r($array_sort1);
    177     arsort($array_sort1);
    178     print_r($array_sort1);
    179     echo "<br/>";
    180     
    181     $array_sort2 = array("aa", "b", "ccc");
    182     uasort($array_sort2, "usort_array");
    183     function usort_array($s1, $s2) {
    184         return strlen($s1) > strlen($s2);
    185     }
    186     print_r($array_sort2);
    187     echo "<br/>";
    188     
    189     $array_sort3 = array("file1", "file11", "file2");
    190     asort($array_sort3);            //先使用普通排序可以看到结果不按数字增序
    191     print_r($array_sort3);
    192     natsort($array_sort3);            //使用自然排序
    193     print_r($array_sort3);
    194     echo "<br/>";
    195         
    196     $array_sort4 = array(array(2,1),array(1,1),array(2,2));    //希望第一个数相同时按第二个数降序排序
    197     foreach ($array_sort4 as $key => $value) {
    198         $array_sort4k[] = $value[0];    
    199         $array_sort4v[] = $value[1];
    200     }
    201     array_multisort($array_sort4k, $array_sort4v, SORT_DESC, $array_sort4);
    202     print_r($array_sort4);
    203     echo "<br/><br/>"; 
    204     
    205         /* 拆分、合并、分解和接合数组
    206          * array_slice        根据条件截取数组,参数一数组名,参数二起始位置,负数表示从后往前数,第三个参数长度(可选),
    207          *                     负表示截取到距离末尾这个长度,第四个参数表示是否保留键名(字符串键名默认保留,数字索引默认不保留),最后返回生成的数组
    208          * array_splice        与slice类似,但作用是选择一段不返回,而是选择一段删除或者用数组替代(参数4),返回生成的数组,原数组会被破坏
    209          * array_combine    一个数组做key,一个数组做value,数组个数必须相同,否则返回false
    210          * array_merge        合并两个数组,键值重复以后一个为准,如果是数字索引的则连续方式重新索引.如果只传入一个数组会用数字重新索引该数组.
    211          * array_intersect    求第一个数组和后面各数组的交集
    212          * array_diff        求第一个数组和后面各数组的差集
    213          */
    214     $array_cont8 = array("Linux", "Apache", "Mysql", "PHP");
    215     print_r(array_slice($array_cont8, 1, 2));
    216     print_r($array_cont8);                            //原数组不会变
    217     echo "<br/>";
    218     
    219     $array_cont8 = array("Linux", "Apache", "Mysql", "PHP");
    220     print_r(array_splice($array_cont8, 1, 2));        //注意返回数组和原数组的值,和array_slice一样
    221     print_r($array_cont8);                            //原数组会改变
    222     echo "<br/>";
    223     $array_cont8 = array("Linux", "Apache", "Mysql", "PHP");
    224     array_splice($array_cont8, -3, -2);                //移除倒数第三个开始到倒数第二个之间的所有元素
    225     print_r($array_cont8);
    226     echo "<br/>";
    227     $array_cont8 = array("Linux", "Apache", "Mysql", "PHP");
    228     array_splice($array_cont8, -3, -1, array("hello", "world", "!"));
    229     print_r($array_cont8);
    230     echo "<br/>";
    231     
    232     $array_cont8k = array("L", "A", "M", "P");
    233     $array_cont8v = array("Linux", "Apache", "Mysql", "PHP");
    234     print_r(array_combine($array_cont8k, $array_cont8v));
    235     echo "<br/>";
    236     
    237     print_r(array_merge($array_cont8k, $array_cont8v));
    238     echo "<br/>";
    239     
    240     $array_cont9a = array("a", "b", "c", "d");
    241     $array_cont9b = array("a", "b");
    242     $array_cont9c = array("a", "c");
    243     print_r(array_intersect($array_cont9a, $array_cont9b, $array_cont9c));
    244     print_r(array_diff($array_cont9a, $array_cont9b, $array_cont9c));
    245     echo "<br/><br/>";
    246     
    247         /* 和数据结构有关的函数(栈、队列)
    248          * 使用数组实现栈
    249          * array_push    将元素压人栈顶/加入队尾(数组尾部),返回长度,可一次性插入多个元素
    250          * array_pop    弹出栈顶元素(尾部元素),返回弹出元素,为空返回NULL
    251          * array_shift        相对于array_pop,删除队列头部元素
    252          * array_unshift    相对于array_push,可在数组头部插入多个元素
    253          */
    254     $array_stack = array();
    255     array_push($array_stack, "aa");
    256     array_push($array_stack, "bb", "cc");
    257     echo array_pop($array_stack)." ";
    258     print_r($array_stack);
    259 
    260     $array_queue = array();
    261     array_push($array_queue, "aa");
    262     array_push($array_queue, "bb", "cc");
    263     echo array_shift($array_queue)." ";
    264     print_r($array_queue);
    265     echo "<br/><br/>";
    266     
    267         /* 其他一些有用的函数
    268          * array_rand        随机返回数组中的一个或多个键名,第二个参数默认1,返回一个随机键名,大于1则返回一个随机键名的数组
    269          * shuffle            随机重新排序
    270          * array_sum        返回所有值的和
    271          * range            返回一个指定范围的数组
    272          */
    273     $array_rand = range(1, 10);
    274     print_r($array_rand);
    275     echo array_sum($array_rand)."<br/>";
    276     echo "<br/>";
    277     
    278     shuffle($array_rand);
    279     print_r($array_rand);
    280     echo "<br/>";
    281     
    282     echo array_rand($array_rand)." ";
    283     print_r(array_rand($array_rand, 3));
    284     
    285 ?>

    执行结果

    Array ( [0] => 1 [1] => 2 [2] => 3 ) 
    array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) } 
    Array ( [0] => aa [ID] => bb [NAME] => cc ) 
    Array ( [0] => 1 [1] => 2 [2] => 3 ) 
    Array ( [0] => aa [ID] => bb [NAME] => cc ) 
    Array ( [小三] => Array ( [0] => 15 [1] => A公司 ) [小四] => Array ( [0] => 20 [1] => B公司 ) ) 
    123
    aabbcc
    0=>aa ID=>bb NAME=>cc 
    0=>aa ID=>bb NAME=>cc 
    0=>aa ID=>bb 
    Array ( [MIBDIRS] => E:/SWM/XAMPP/php/extras/mibs [MYSQL_HOME] => xamppmysqlin [OPENSSL_CONF] => E:/SWM/XAMPP/apache/bin/openssl.cnf [PHP_PEAR_SYSCONF_DIR] => xamppphp [PHPRC] => xamppphp [TMP] => xampp	mp [HTTP_ACCEPT] => text/html, application/xhtml+xml, */* [HTTP_ACCEPT_LANGUAGE] => zh-CN [HTTP_USER_AGENT] => Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) LBBROWSER [HTTP_ACCEPT_ENCODING] => gzip, deflate [HTTP_HOST] => localhost [HTTP_CONNECTION] => Keep-Alive [PATH] => C:Windowssystem32;C:Windows;C:WindowsSystem32Wbem;C:WindowsSystem32WindowsPowerShellv1.0 [SystemRoot] => C:Windows [COMSPEC] => C:Windowssystem32cmd.exe [PATHEXT] => .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC [WINDIR] => C:Windows [SERVER_SIGNATURE] => 
    Apache/2.4.4 (Win32) OpenSSL/0.9.8y PHP/5.4.16 Server at localhost Port 80
    [SERVER_SOFTWARE] => Apache/2.4.4 (Win32) OpenSSL/0.9.8y PHP/5.4.16 [SERVER_NAME] => localhost [SERVER_ADDR] => ::1 [SERVER_PORT] => 80 [REMOTE_ADDR] => ::1 [DOCUMENT_ROOT] => E:/SWM/XAMPP/htdocs [REQUEST_SCHEME] => http [CONTEXT_PREFIX] => [CONTEXT_DOCUMENT_ROOT] => E:/SWM/XAMPP/htdocs [SERVER_ADMIN] => postmaster@localhost [SCRIPT_FILENAME] => E:/SWM/XAMPP/htdocs/02base/04.php [REMOTE_PORT] => 56285 [GATEWAY_INTERFACE] => CGI/1.1 [SERVER_PROTOCOL] => HTTP/1.1 [REQUEST_METHOD] => GET [QUERY_STRING] => [REQUEST_URI] => /02base/04.php [SCRIPT_NAME] => /02base/04.php [PHP_SELF] => /02base/04.php [REQUEST_TIME_FLOAT] => 1375197789.994 [REQUEST_TIME] => 1375197789 ) 
    Array ( ) 
    数组相关处理函数
    Array ( [0] => aa [1] => bb [2] => cc ) 
    Array ( [0] => 0 [1] => ID [2] => NAME ) Array ( [0] => NAME ) 
    bool(true) bool(false) 
    Array ( [aa] => 0 [bb] => ID [cc] => NAME ) 
    Array ( [NAME] => cc [ID] => bb [0] => aa ) 
    
    9
    Array ( [1] => 3 [2] => 3 [3] => 3 ) Array ( [0] => 1 [3] => 2 [6] => 3 ) 
    
    Array ( [3] => 2 [4] => 2 [5] => 2 ) 0=>1 1=>1 2=>1 3=>2 4=>2 5=>2 6=>3 7=>3 8=>3 
    Array ( [0] => nook [1] => nook [2] => nook [3] => ok [4] => ok [5] => ok [6] => ok [7] => ok [8] => ok ) 
    
    Array ( [0] => 1 [1] => 2 [2] => 3 ) Array ( [0] => 3 [1] => 2 [2] => 1 ) 
    Array ( [a] => 1 [b] => 2 [c] => 3 ) Array ( [c] => 3 [b] => 2 [a] => 1 ) 
    Array ( [a] => 1 [b] => 2 [c] => 3 ) Array ( [c] => 3 [b] => 2 [a] => 1 ) 
    Array ( [1] => b [0] => aa [2] => ccc ) 
    Array ( [0] => file1 [1] => file11 [2] => file2 ) Array ( [0] => file1 [2] => file2 [1] => file11 ) 
    Array ( [0] => Array ( [0] => 1 [1] => 1 ) [1] => Array ( [0] => 2 [1] => 2 ) [2] => Array ( [0] => 2 [1] => 1 ) ) 
    
    Array ( [0] => Apache [1] => Mysql ) Array ( [0] => Linux [1] => Apache [2] => Mysql [3] => PHP ) 
    
    Array ( [0] => Apache [1] => Mysql ) Array ( [0] => Linux [1] => PHP ) 
    Array ( [0] => Linux [1] => Mysql [2] => PHP ) 
    Array ( [0] => Linux [1] => hello [2] => world [3] => ! [4] => PHP ) 
    Array ( [L] => Linux [A] => Apache [M] => Mysql [P] => PHP ) 
    Array ( [0] => L [1] => A [2] => M [3] => P [4] => Linux [5] => Apache [6] => Mysql [7] => PHP ) 
    Array ( [0] => a ) Array ( [3] => d ) 
    
    cc Array ( [0] => aa [1] => bb ) aa Array ( [0] => bb [1] => cc ) 
    
    Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 [8] => 9 [9] => 10 ) 55
    
    Array ( [0] => 6 [1] => 3 [2] => 2 [3] => 7 [4] => 8 [5] => 4 [6] => 1 [7] => 5 [8] => 10 [9] => 9 ) 
    3 Array ( [0] => 0 [1] => 3 [2] => 9 ) 
  • 相关阅读:
    Ubuntu 14.04 卸载通过源码安装的库
    Ubuntu 14.04 indigo 相关依赖
    Ubuntu 14.04 indigo 安装 cartographer 1.0.0
    Ubuntu 14.04 改变文件或者文件夹的拥有者
    安装cartographer遇到Unrecognized syntax identifier "proto3". This parser only recognizes "proto2"问题
    Unrecognized syntax identifier "proto3". This parser only recognizes "proto2". ”问题解决方法
    查看所有用户组,用户名
    1卸载ROS
    Ubuntu14.04 软件安装卸载
    Ubuntu14.04系统显示器不自动休眠修改
  • 原文地址:https://www.cnblogs.com/swm8023/p/3224163.html
Copyright © 2011-2022 走看看