PHP学习笔记04——数组
<?php
// 1.数组的声明,可以直接为数组元素赋值,也可以使用array函数声明数组
/* 索引数组:下标从0开始,依次递增
* 关联数组:字符串为下标
* */
//直接赋值声明数组,不需要先声明,使用ar[]将自动填写最大下标
$array_cont1[0] = 1;
$array_cont1[1] = 2;
$array_cont1[] = 3; //调试程序时,可以使用print_r()或者var_dump()查看所有的元素
print_r($array_cont1);
echo "<br/>";
var_dump($array_cont1);
echo "<br/>"; //也可以使用string以及混合下标来声明数组
$array_cont2[0] = "aa";
$array_cont2["ID"] = "bb";
$array_cont2["NAME"] = "cc";
print_r($array_cont2);
echo "<br/>"; //使用array格式来声明数组
$array_cont3 = array(1, 2, 3);
$array_cont4 = array(0=>"aa", "ID"=>"bb", "NAME"=>"cc");
print_r($array_cont3);
echo "<br/>";
print_r($array_cont4);
echo "<br/>"; //声明二维数组,使用方括号来声明和一维没什么不一样,这里使用array来声明一个二维数组
$array_cont5 = array(
"小三" => array(15, "A公司"),
"小四" => array(20, "B公司")
);
print_r($array_cont5);
echo "<br/>"; // 2.数组的遍历
/* 数组的遍历有多种方法,这里主要介绍以下几种
* for循环,只能访问索引值全部为数字的数组,很少使用
* foreach循环,比较方便的一种访问方法
* 使用list(),each()加while来遍历,类似于iterator
* 使用数组内部指针访问
*/
// 使用for循环,只能访问数组下标是连续数字的数组
for( $i = 0; $i <count($array_cont1); $i++)
echo $array_cont1[$i];
echo "<br/>"; // 使用foreach遍历,有两种方式,第一种只能访问value,第二种能访问key和value
foreach ($array_cont2 as $value)
echo $value;
echo "<br/>"; foreach ($array_cont2 as $key=>$value)
echo $key."=>".$value." ";
echo "<br/>"; // 使用each()+list()+while()来访问,在之前最好调用以下reset将数组指针重新指向第一个元素
// each()返回一个数组(0,1,key,value),其中0对应Key,1对应value,之后向后移动指针,到末尾返回FALSE
// list()用于给一组变量赋值
reset($array_cont2);
while(list($key, $value) = each($array_cont2))
echo $key."=>".$value." ";
echo "<br/>"; // 使用数组内部指针,有current(),key(),next(),prev(),end(),reset();
// current()指向当前value,key()指向当前值,reset()重置到第一个元素
reset($array_cont2);
echo key($array_cont2)."=>".current($array_cont2)." ";
next($array_cont2);
echo key($array_cont2)."=>".current($array_cont2)." ";
echo "<br/>"; // 3. 预定义数组,PHP预定义的数组,又称为超全局变量,不需要使用global就可以全局访问
/* 这里大致介绍有哪些预定义数组,在后面的章节有详细的介绍
* $_SERVER 包含诸如头信息、路径和脚本位置的数组
* $_ENV 包含PHP所在服务器的环境信息
* $_GET 通过HTTP的GET方法传递的变量
* $_POST 通过HTTP的POST方法传递的变量
* $_REQUEST包含$_GET和$_POST和$_COOKIE种的所有内容,但速度比较慢,不提议使用
* $_FILES 使用file域上传的文件内容,比较复杂
* $_COOKIE HTTP COOKIES
* $_SESSION HTTP SESSION
* $_GLOBALS已经定义的全局变量组成的数组,用来取替global关键字
* */
print_r($_SERVER);echo "<br/>";
print_r($_ENV);echo "<br/>"; // 4. 数组的相关处理函数.PHP中有大量的数组处理函数,本节介绍一些常用函数
echo "数组相关处理函数<br/>";
/* 键值操作函数
* array_values() 输出所有value,可用于将关联数组转化为索引数组
* array_keys() 输出所有key,原型第二个参数用于搜索指定value的key,第三个参数代表是否进行全等匹配
* in_array() 判断是否有某个value,第三个参数代表是否进行全等匹配
* array_flip() 交换函数的key和value,返回交换后的数组,多个相同value取最后一个,注意值的数组类型只能是字符串或整数
* array_reverse() 将数组元素顺序翻转
* */ print_r(array_values($array_cont2));
echo "<br/>"; print_r(array_keys($array_cont2));
print_r(array_keys($array_cont2, "cc", true));
echo "<br/>"; var_dump(in_array("cc",$array_cont2, true));
var_dump(in_array("cd",$array_cont2, false));
echo "<br/>"; print_r(array_flip($array_cont2));
echo "<br/>"; print_r(array_reverse($array_cont2));
echo "<br/><br/>"; /* 统计数组元素的个数和唯一性
* count() 统计数组元素的个数,第二个参数默认0,不检测多维数组的个数,为1时检测
* array_count_values() 统计所有值出现的次数,返回一个数组
* array_unique() 删除数组中重复的值,返回没有重复值的数组
* */
$array_cont6 = array(1, 1, 1, 2, 2, 2, 3, 3, 3);
echo count($array_cont6)."<br/>";
print_r(array_count_values($array_cont6));
print_r(array_unique($array_cont6));
echo "<br/><br/>"; /* 使用回调函数处理数组的函数
* array_filter() 返回按用户自定义函数过滤后的新函数
* array_walk() 对数组中的每个元素用回调函数处理,成功返回true,否则返回false
* array_map() 可处理多个数组,回调函数参数个数与数组数相同,并行处理所有数组,要保证传入数组个数相同,不足用空代替.返回字符串.
*/
function filter_ar($var) {
return $var % 2 == 0;
}
function walk_ar($value, $key) {
echo $key."=>".$value." ";
}
print_r(array_filter($array_cont6, 'filter_ar'));
array_walk($array_cont6, "walk_ar"); //也可以传入第三个参数,作为相应回调函数的第三个参数
echo "<br/>";
function map_ar($s1, $s2) {
return $s1 == $s2 ? 'ok' : 'nook';
}
$array_cont7 = array(2, 2, 2, 2, 2, 2, 3, 3, 3);
print_r(array_map("map_ar", $array_cont6, $array_cont7));
echo "<br/><br/>"; /* 常用数组的排序函数
* sort,rsort 原始的排序方式,加r是逆向排序,注意排序后会用数组重新索引下标,第一个参数为数组,第二个参数为排序方法,可选.
* ksort,krsort 按键名进行排序,其它使用方法同sort
* asort,kasort 按值进行排序,和sort使用方法类似与sort不同的是下标保持不变
* 以上排序函数第二个参数可以是SORT_REGULAR(默认,自动识别),SORT_NUMERIC(数字),SORT_STRING(字符串),SORT_LOCALE_STRING(根据locale设置来把元素当作字符串比较)
* usort,uasort,uksort 用户自定义排序方法,第二个参数是用户的回掉函数(回调函数返回True表示s1大于s2)
* natsort,natcasesort 自然排序法排序,数字1-9、字母a-z、短者优先.natcasesort是忽视大小写的自然排序
* array_multisort 多个数组或多维数组排序,传入多个数组,先按第一个数组来,再按第二个,类推.每个数组后都可以接order(SORT_ASC,SORT_DESC)和type参数(同sort).
*/
$array_sort1 = array('b'=>2, 'a'=>1, 'c'=>3);
sort($array_sort1);
print_r($array_sort1);
rsort($array_sort1);
print_r($array_sort1);
echo "<br/>"; $array_sort1 = array('b'=>2, 'a'=>1, 'c'=>3);
ksort($array_sort1);
print_r($array_sort1);
krsort($array_sort1);
print_r($array_sort1);
echo "<br/>"; $array_sort1 = array('b'=>2, 'a'=>1, 'c'=>3);
asort($array_sort1);
print_r($array_sort1);
arsort($array_sort1);
print_r($array_sort1);
echo "<br/>"; $array_sort2 = array("aa", "b", "ccc");
uasort($array_sort2, "usort_array");
function usort_array($s1, $s2) {
return strlen($s1) > strlen($s2);
}
print_r($array_sort2);
echo "<br/>"; $array_sort3 = array("file1", "file11", "file2");
asort($array_sort3); //先使用普通排序可以看到结果不按数字增序
print_r($array_sort3);
natsort($array_sort3); //使用自然排序
print_r($array_sort3);
echo "<br/>"; $array_sort4 = array(array(2,1),array(1,1),array(2,2)); //希望第一个数相同时按第二个数降序排序
foreach ($array_sort4 as $key => $value) {
$array_sort4k[] = $value[0];
$array_sort4v[] = $value[1];
}
array_multisort($array_sort4k, $array_sort4v, SORT_DESC, $array_sort4);
print_r($array_sort4);
echo "<br/><br/>"; /* 拆分、合并、分解和接合数组
* array_slice 根据条件截取数组,参数一数组名,参数二起始位置,负数表示从后往前数,第三个参数长度(可选),
* 负表示截取到距离末尾这个长度,第四个参数表示是否保留键名(字符串键名默认保留,数字索引默认不保留),最后返回生成的数组
* array_splice 与slice类似,但作用是选择一段不返回,而是选择一段删除或者用数组替代(参数4),返回生成的数组,原数组会被破坏
* array_combine 一个数组做key,一个数组做value,数组个数必须相同,否则返回false
* array_merge 合并两个数组,键值重复以后一个为准,如果是数字索引的则连续方式重新索引.如果只传入一个数组会用数字重新索引该数组.
* array_intersect 求第一个数组和后面各数组的交集
* array_diff 求第一个数组和后面各数组的差集
*/
$array_cont8 = array("Linux", "Apache", "Mysql", "PHP");
print_r(array_slice($array_cont8, 1, 2));
print_r($array_cont8); //原数组不会变
echo "<br/>"; $array_cont8 = array("Linux", "Apache", "Mysql", "PHP");
print_r(array_splice($array_cont8, 1, 2)); //注意返回数组和原数组的值,和array_slice一样
print_r($array_cont8); //原数组会改变
echo "<br/>";
$array_cont8 = array("Linux", "Apache", "Mysql", "PHP");
array_splice($array_cont8, -3, -2); //移除倒数第三个开始到倒数第二个之间的所有元素
print_r($array_cont8);
echo "<br/>";
$array_cont8 = array("Linux", "Apache", "Mysql", "PHP");
array_splice($array_cont8, -3, -1, array("hello", "world", "!"));
print_r($array_cont8);
echo "<br/>"; $array_cont8k = array("L", "A", "M", "P");
$array_cont8v = array("Linux", "Apache", "Mysql", "PHP");
print_r(array_combine($array_cont8k, $array_cont8v));
echo "<br/>"; print_r(array_merge($array_cont8k, $array_cont8v));
echo "<br/>"; $array_cont9a = array("a", "b", "c", "d");
$array_cont9b = array("a", "b");
$array_cont9c = array("a", "c");
print_r(array_intersect($array_cont9a, $array_cont9b, $array_cont9c));
print_r(array_diff($array_cont9a, $array_cont9b, $array_cont9c));
echo "<br/><br/>"; /* 和数据结构有关的函数(栈、队列)
* 使用数组实现栈
* array_push 将元素压人栈顶/加入队尾(数组尾部),返回长度,可一次性插入多个元素
* array_pop 弹出栈顶元素(尾部元素),返回弹出元素,为空返回NULL
* array_shift 相对于array_pop,删除队列头部元素
* array_unshift 相对于array_push,可在数组头部插入多个元素
*/
$array_stack = array();
array_push($array_stack, "aa");
array_push($array_stack, "bb", "cc");
echo array_pop($array_stack)." ";
print_r($array_stack); $array_queue = array();
array_push($array_queue, "aa");
array_push($array_queue, "bb", "cc");
echo array_shift($array_queue)." ";
print_r($array_queue);
echo "<br/><br/>"; /* 其他一些有用的函数
* array_rand 随机返回数组中的一个或多个键名,第二个参数默认1,返回一个随机键名,大于1则返回一个随机键名的数组
* shuffle 随机重新排序
* array_sum 返回所有值的和
* range 返回一个指定范围的数组
*/
$array_rand = range(1, 10);
print_r($array_rand);
echo array_sum($array_rand)."<br/>";
echo "<br/>"; shuffle($array_rand);
print_r($array_rand);
echo "<br/>"; echo array_rand($array_rand)." ";
print_r(array_rand($array_rand, 3)); ?>
执行结果
Array ( [] => 1 [] => 2 [] => 3 )
array(3) { []=> int(1) []=> int(2) []=> int(3) }
Array ( [] => aa [ID] => bb [NAME] => cc )
Array ( [] => 1 [] => 2 [] => 3 )
Array ( [] => aa [ID] => bb [NAME] => cc )
Array ( [小三] => Array ( [] => 15 [] => A公司 ) [小四] => Array ( [] => 20 [] => 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] => \xampp\mysql\bin [OPENSSL_CONF] => E:/SWM/XAMPP/apache/bin/openssl.cnf [PHP_PEAR_SYSCONF_DIR] => \xampp\php [PHPRC] => \xampp\php [TMP] => \xampp\tmp [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:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\ [SystemRoot] => C:\Windows [COMSPEC] => C:\Windows\system32\cmd.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 ( [] => aa [] => bb [] => cc )
Array ( [] => 0 [] => ID [] => NAME ) Array ( [] => NAME )
bool(true) bool(false)
Array ( [aa] => 0 [bb] => ID [cc] => NAME )
Array ( [NAME] => cc [ID] => bb [] => aa ) 9
Array ( [] => 3 [] => 3 [] => 3 ) Array ( [] => 1 [] => 2 [] => 3 ) Array ( [] => 2 [] => 2 [] => 2 ) 0=>1 1=>1 2=>1 3=>2 4=>2 5=>2 6=>3 7=>3 8=>3
Array ( [] => nook [] => nook [] => nook [] => ok [] => ok [] => ok [] => ok [] => ok [] => ok ) Array ( [] => 1 [] => 2 [] => 3 ) Array ( [] => 3 [] => 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 ( [] => b [] => aa [] => ccc )
Array ( [] => file1 [] => file11 [] => file2 ) Array ( [] => file1 [] => file2 [] => file11 )
Array ( [] => Array ( [] => 1 [] => 1 ) [] => Array ( [] => 2 [] => 2 ) [] => Array ( [] => 2 [] => 1 ) ) Array ( [] => Apache [] => Mysql ) Array ( [] => Linux [] => Apache [] => Mysql [] => PHP ) Array ( [] => Apache [] => Mysql ) Array ( [] => Linux [] => PHP )
Array ( [] => Linux [] => Mysql [] => PHP )
Array ( [] => Linux [] => hello [] => world [] => ! [] => PHP )
Array ( [L] => Linux [A] => Apache [M] => Mysql [P] => PHP )
Array ( [] => L [] => A [] => M [] => P [] => Linux [] => Apache [] => Mysql [] => PHP )
Array ( [] => a ) Array ( [] => d ) cc Array ( [] => aa [] => bb ) aa Array ( [] => bb [] => cc ) Array ( [] => 1 [] => 2 [] => 3 [] => 4 [] => 5 [] => 6 [] => 7 [] => 8 [] => 9 [] => 10 ) 55 Array ( [] => 6 [] => 3 [] => 2 [] => 7 [] => 8 [] => 4 [] => 1 [] => 5 [] => 10 [] => 9 )
3 Array ( [] => 0 [] => 3 [] => 9 )
PHP学习笔记04——数组的更多相关文章
- SaToken学习笔记-04
SaToken学习笔记-04 如果有问题,请点击:传送门 角色认证 在sa-token中,角色和权限可以独立验证 // 当前账号是否含有指定角色标识, 返回true或false StpUtil.has ...
- PHP学习笔记之数组篇
摘要:其实PHP中的数组和JavaScript中的数组很相似,就是一系列键值对的集合.... 转载请注明来源:PHP学习笔记之数组篇 一.如何定义数组:在PHP中创建数组主要有两种方式,下面就让我 ...
- JavaScript学习笔记之数组(二)
JavaScript学习笔记之数组(二) 1.['1','2','3'].map(parseInt) 输出什么,为什么? ['1','2','3'].map(parseInt)//[1,NaN,NaN ...
- 机器学习实战(Machine Learning in Action)学习笔记————04.朴素贝叶斯分类(bayes)
机器学习实战(Machine Learning in Action)学习笔记————04.朴素贝叶斯分类(bayes) 关键字:朴素贝叶斯.python.源码解析作者:米仓山下时间:2018-10-2 ...
- Redis:学习笔记-04
Redis:学习笔记-04 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 10. Redis主从复制 1 ...
- Scala入门学习笔记三--数组使用
前言 本篇主要讲Scala的Array.BufferArray.List,更多教程请参考:Scala教程 本篇知识点概括 若长度固定则使用Array,若长度可能有 变化则使用ArrayBuffer 提 ...
- xml基础学习笔记04
今天继续xml学习,主要是:SimpleXML快速解析文档.xml与数组相互转换 .博客中只是简单的做一个学习记录.积累.更加详细的使用方法,可以查看php手册 1.SimpleXML快速解析文档 前 ...
- JavaScript学习笔记:数组reduce()和reduceRight()方法
很多时候需要累加数组项的得到一个值(比如说求和).如果你碰到一个类似的问题,你想到的方法是什么呢?会不会和我一样,想到的就是使用for或while循环,对数组进行迭代,依次将他们的值加起来.比如: v ...
- OpenCV 学习笔记 04 深度估计与分割——GrabCut算法与分水岭算法
1 使用普通摄像头进行深度估计 1.1 深度估计原理 这里会用到几何学中的极几何(Epipolar Geometry),它属于立体视觉(stereo vision)几何学,立体视觉是计算机视觉的一个分 ...
随机推荐
- mouseover与mouseenter的区别
mouseenter事件在鼠标进入某个元素,或第一次进入这个元素的某个子元素时触发.一旦触发后,在mouseleave之前,鼠标在这个元素的子元素上触发mouseenter事件都不会触发这个元素的mo ...
- 【译】Python中如何创建mock?
原文地址:http://engineroom.trackmaven.com/blog/making-a-mockery-of-python/ 今天我们来谈论下mock的使用.当然,请不要误会,这里的m ...
- Java 并发同步器之CountDownLatch、CyclicBarrier
一.简介 1.CountDownLatch是一个同步计数器,构造时传入int参数,该参数就是计数器的初始值,每调用一次countDown()方法,计数器减1,计数器大于0 时,await()方法会阻塞 ...
- HDU2829 Lawrence(斜率优化dp)
学了模板题之后上网搜下斜率优化dp的题目,然后就看到这道题,知道是斜率dp之后有思路就可以自己做不出来,要是不事先知道的话那就说不定了. 题意:给你n个数,一开始n个数相邻的数之间是被东西连着的,对于 ...
- POJ 2013
#include <iostream> #include <string> #define MAXN 20 using namespace std; string _m[MAX ...
- POJ 1455
/* 冒泡排序n*(n-1)/2; */ #include <iostream> using namespace std; int main() { //freopen("acm ...
- POJ 1507
#include<iostream> #include<stdio.h> using namespace std; #include<iomanip> double ...
- svn教程
安装过程: 1.下载软件后,双击程序进行安装,点击“Next”: 2.在许可证协议页面,选择“I Accept the terms in the License Agreement”,点击“Next” ...
- Linux Mint 17 + 小米WIFI创建手机热点
转载:http://www.pppei.net/blog/post/690 亲测可行! 我的系统是linux mint 17.1 64位,所用wifi位小米WIFI. 以下是原文: 此方法在linux ...
- lintcode:背包问题II
背包问题II 给出n个物品的体积A[i]和其价值V[i],将他们装入一个大小为m的背包,最多能装入的总价值有多大? 注意事项 A[i], V[i], n, m均为整数.你不能将物品进行切分.你所挑选的 ...