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 ) 
  • 相关阅读:
    物联网操作系统HelloX V1.77(beta)版本发布
    对XX证券报关于物联网操作系统的几个问题的答复
    Android利用广播实现ViewPager中item之间的数据通信
    Android创建桌面快捷方式
    Android时间选择器对话框的使用
    Android数据库LitePal的存储操作
    Android创建数据表和LitePal的基本用法
    我的2014
    logstash 安装zabbix插件
    tag_on_failure => [] # prevent default _grokparsefailure tag on real records
  • 原文地址:https://www.cnblogs.com/swm8023/p/3224163.html
Copyright © 2011-2022 走看看