细说php(六) 数组
一、数组概述
1.1 数组是复合类型
1.2 数组中能够存储随意长度的数据, 也能够存储随意类型的数据
二、数组的类型
2.1 索引数组: 下标是顺序整数作为索引
<?php
$user[0] = 1;
$user[1] = "zhangsan";
$user[2] = "aaa@bb.com"; echo '<pre>';
print_r($user);
echo '</pre>';
?>
2.2 关联数组: 下标是字符串作为索引
<?php
$user["id"] = 1;
$user["name"] = "zhangsan";
$user["email"] = "aaa@bb.com"; echo '<pre>';
print_r($user);
echo '</pre>';
$user["name"] = "lisi";
echo $user["name"];
?>
三、数组的多种声明方式
3.1 直接为数组元素赋值
a. 假设索引下标不给值,就会从0開始顺序索引
b. 假设给出索引下标,下一个就会是从最大的開始增1
c. 假设后面出现前面的下标,假设是赋值就是为前面的元素又一次赋值
d. 混合声明时,索引和关联不互相影响(不影响索引下标的声明)
3.2 使用array()函数
a. 默认是索引数组
b. 假设为关联数组和索引数组指定下标,使用 键=>值
c. 多个成员之前使用“,”切割
<?php
$user1 = array (1, "zhsangsan", 10, "nan", "aaa@bbb.com");
echo '<pre>';
print_r($user1);
echo '</pre>'; /**
Array(
[0] => 1
[1] => zhsangsan
[2] => 10
[3] => nan
[4] => aaa@bbb.com
)
*/ $user2 = array("id"=>1, "name"=>"zhsangsan", "age"=>10, 100=>"nan", "aaa@bbb.com");
echo '<pre>';
print_r($user2);
echo '</pre>'; /**
Array(
[id] => 1
[name] => zhsangsan
[age] => 10
[100] => nan
[101] => aaa@bbb.com
)
*/
?>
重要知识点: 二维数组
<?php
$info=array(
"user"=>array(
array(1, "zansan", 10, "nan"),
array(2, "lisi", 20, "nv")
)
);
echo $info["user"][1][1]; // lisi
echo '<pre>';
print_r($info);
echo '</pre>'; /**
Array
(
[user] => Array
(
[0] => Array
(
[0] => 1
[1] => zansan
[2] => 10
[3] => nan
) [1] => Array
(
[0] => 2
[1] => lisi
[2] => 20
[3] => nv
) ) )
*/
?>
四、数组的遍历
4.1 使用for语句循环遍历(不推荐)
局限性: 数组必须是索引数组, 并且下标必须是连续的 (然而索引数组下标能够不连续, 数组还可能是关联数组)
<?php
$user = array(1, "zhasna", "aaa@bb.com");
for($i = 0; $i < count($user); $i++){
echo "\$user[{$i}]=".$user[$i]."<br>";
} /**
$user[0]=1
$user[1]=zhasna
$user[2]=aaa@bb.com
*/
?>
4.2 使用foreach语句循环遍历(强烈推荐)
循环次数由数组的元素个数决定, 每一次循环都会将数组中的元素分别赋值给后面的变量
<?php
$user=array(1, "name"=>"zhasna", "age"=>40, 100=>"nan", "aaa@bb.com");
foreach($user as $key => $val){ // $var 是自己定义变量, $key自己定义变量
echo $key." =====> ".$val."<br>";
} /*
0 =====> 1
name =====> zhasna
age =====> 40
100 =====> nan
101 =====> aaa@bb.com
*/ foreach($user as $val){ // 不要key也能够, 直接遍历$user的值
echo $val."<br>";
} /*
1
zhasna
40
nan
aaa@bb.com
*/
?>
4.3 使用while(), list(), each() 组合循环遍历(不推荐)
each() 函数:
* 须要一个数组作为參数
* 返回来的也是一个数组
* 返回来的数组时0, 1, key, value四个下标, 0和key下标是当前数组元素的键, 1和value下标是当前数组元素的值
* 默认当前元素就是第一个元素
* 每运行一次后就会将当前元素向后移动
* 假设已经到了最后还运行这个函数, 则返回false
<?php
$user = array("id"=>1, "name"=>"zhangsan", "age"=>10, "sex"=>"nan"); while($arr = each($user)){
// echo $arr[0]."==>".$arr[1]."<br>";
echo $arr["key"]." ----> ".$arr["value"]."<br>";
} /**
id ----> 1
name ----> zhangsan
age ----> 10
sex ----> nan
*/
?>
list() 函数:
* list()=array(); 须要将一个数组赋值给这个函数
* 数组中的元素个数要和list()函数中的參数个数同样
* 数组中的每一个元素值会赋值给list()函数中的每一个參数,list()将每一个參数转为变量
* list()仅仅能接收索引数组
<?php
list($name, $age, $sex) = array("zansan", 10, "nnnnn");
echo $name."<br>";
echo $age."<br>"; // list中的值和数组中的值一一相应
echo $sex."<br>"; // 假设不想给name赋值, 那就写成list(, $age, $sex)
/*
zansan
10
nnnnn
*/ $user1 = array("id"=>1, "name"=>"zhangsan", "age"=>10, "sex"=>"nan");
list($key, $value) = each($user1); // Array ( [1] => 1 [0] => id )
echo $key." --> ".$value;
/*
id --> 1
*/ $user2 = array("id"=>1, "name"=>"zhangsan", "age"=>10, "sex"=>"nan");
while(list($key, $value) = each($user2)){
echo $key." ==> ".$value."<br>";
}
/*
name ==> zhangsan
age ==> 10
sex ==> nan
*/
?>
五、提前定义数组
自己主动全局变量 -- 超全局数组
1. 包括了来自WEBserver,client,执行环境和用户输入的数据
2. 提前定义数组在全局范围内自己主动生效,比如在函数中不用声明global也能够使用这些数组
3. 用户不能自己定义这些数组, 但这些数据操作方式又和我们自己定义的数组操作方式一样
* $_GET // 经由URL请求提交至脚本的变量
* $_POST // 经由HTTP POST方法提交到脚本的变量
* $_REQUEST // 经由GET, POST和COOKIE机制提交到脚本的变量,因此该数组并不值得信任,尽量不去使用
* $_FILES // 经由HTTP POST 文件上传而提交至脚本的变量
* $_COOKIE //
* $_SESSION //
* $_ENV // 运行环境提交至脚本的变量
* $_SERVER // 变量由WEBserver设定的,或直接和当前脚本的运行环境相关联
* $GLOBALS // 仅仅要是当前脚本有效的变量都在这里,数组键名为全局变量的名称
<?php
print_r($_GET);
echo $_GET["username"]."<br>"; // 获取get方式url中的username print_r($_POST);
echo $_POST["uname"]."<br>"; // 获取post方式表单提交的uname print_r($_REQUEST);
echo $_ENV["OS"]."<br>"; // 获取key为'OS'的value
echo $_SERVER["DOCUMENT_ROOT"]."<br>"; // 获取key为'DOCUMENT_ROOT'的value $a = 100; // 定义的变量会存到$GLOBALS中
function demo(){
echo $GLOBALS["a"]."<br>"; // 无需声明global就能够直接取值
} demo();
?> <form action="demo.php" method="post"> <!-- post方式提交数据, 数据会存到$_POST中 -->
username: <input type="text" name="uname"><br>
password: <input type="password" name="pass"><br>
<input type="submit" value="login"> <br>
</form> <a href="demo.php?username=zhangsan">this is a $_GET test</a> <!-- get方式提交数据, 数据会存到$_GET中 -->
六、数组相关函数
1. 数组键/值操作有关的函数
* 1.1 array_values() 返回 input
数组中全部的值并给其建立数字索引
<?php
$array = array (
"size" => "XL",
"color" => "gold"
);
print_r(array_values($array)); /*
Array
(
[0] => XL
[1] => gold
)
*/
?>
* 1.2 array_keys() 返回数组中全部的键名
<?php
$array = array (
0 => 100,
"color" => "red"
);
print_r(array_keys($array)); /*
Array(
[0] => 0
[1] => color
)
*/
?>
* 1.3 in_array() 检查数组中是否存在某个值
<?php
$os = array ("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $os)) {
echo "Got Irix";
}
if (in_array("mac", $os)) {
echo "Got mac";
}
?>
* 1.4 array_key_exists 当给定的key
存在于数组中时返回TRUE
<?php
$search_array = array (
'first' => 1,
'second' => 4
);
if (array_key_exists('first', $search_array)) {
echo "The 'first' element is in the array";
}
?>
* 1.5 array_flip 交换数组中的键和值
<?php
$trans = array (
"a" => 1,
"b" => 1,
"c" => 2
);
$trans = array_flip($trans);
print_r($trans); // Array ( [1] => b [2] => c )
// 假设同一个值出现了多次,则最后一个键名将作为它的值,全部其他的都丢失了
?>
* 1.6
array_reverse 返回一个单元顺序相反的数组
<?php
$input = array (
"php",
4.0,
array (
"green",
"red"
)
);
$result = array_reverse($input);
print_r($result);
// Array ( [0] => Array ( [0] => green [1] => red ) [1] => 4 [2] => php )
?>
2. 统计数组元素的个数和惟一性
* 2.1 count() sizeof();
<?php
$a[0] = 1;
$a[1] = 3;
$a[2] = 5;
$result = count($a);
print_r($result); // 3
?>
* 2.2
array_count_values 统计数组中全部的值出现的次数
<?php
$array = array (
1,
"hello",
1,
"world",
"hello"
);
echo "<pre>";
print_r(array_count_values($array));
echo "</pre>"; /*
Array
(
[1] => 2
[hello] => 2
[world] => 1
)
*/
* 2.3
array_unique 移除数组中反复的值
<?php
$input = array("a" => "green", "red", "b" => "green", "blue", "red");
$result = array_unique ($input);
echo "<pre>";
print_r($result);
echo "</pre>"; /*
Array
(
[a] => green
[0] => red
[1] => blue
)
*/
?>
3. 使用回调函数处理数组的函数
* 3.1 array_filter() 用回调函数过滤数组中的单元
<?php
function odd($var) {
// returns whether the input integer is odd
return ($var & 1);
} $array = array (
"a" => 1,
"b" => 2,
"c" => 3
); echo "<pre>";
print_r(array_filter($array, "odd"));
echo "</pre>"; /*
Array
(
[a] => 1
[c] => 3
)
*/
?>
* 3.2 array_walk() 使用用户自己定义函数对数组中的每一个元素做回调处理
<?php
$fruits = array (
"d" => "lemon",
"a" => "orange",
"b" => "banana",
"c" => "apple"
); // funcname 接受两个參数。array參数的值作为第一个,键名作为第二个。
function test_print($item, $key) {
echo " $key => $item <br />\n";
} array_walk($fruits, 'test_print'); /*
d => lemon
a => orange
b => banana
c => apple
*/
?>
* 3.3 array_map() 将回调函数作用到给定数组的单元上
<?php
function cube($n){
return($n * $n * $n);
} $a = array(1, 2, 3, 4, 5);
$b = array_map ("cube", $a);
print_r($b);
// Array ([0] => 1 [1] => 8 [2] => 27 [3] => 64 [4] => 125)
?>
4. 数组的排序函数
* 4.1 sort() rsort() 简单的数组排序
<?php
$fruits = array("lemon", "orange", "banana", "apple");
sort($fruits);
foreach ($fruits as $key => $val) {
echo "fruits[" . $key . "] = " . $val . "<br>";
} /*
fruits[0] = apple
fruits[1] = banana
fruits[2] = lemon
fruits[3] = orange
*/
?>
* 4.2
ksort() krsort() 依据键名对数组排序
<?php
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
ksort($fruits);
foreach ($fruits as $key => $val){
echo "$key = $val <br>";
} /*
a = orange
b = banana
c = apple
d = lemon
*/
?>
* 4.3
asort() arsort() 依据元素的值对数组排序
<?php
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
asort($fruits);
foreach ($fruits as $key => $val){
echo "$key = $val <br>";
} /*
c = apple
b = banana
d = lemon
a = orange
*/
?>
* 4.4
natsort() natcasesort() 依据“自然数排序”法对数组排序
<?php
$array = array("img12.png", "img10.png", "img2.png", "img1.png");
asort($array);
echo "<pre>";
print_r($array);
echo "</pre>"; /*
Array
(
[3] => img1.png
[1] => img10.png
[0] => img12.png
[2] => img2.png
)
*/
?>
* 4.5
usort() uasort() uksort() 依据用户自己定义规则对数组排序
<?php
function cmp($a, $b){
if($a == $b){
return 0;
}
return ($a < $b) ? - 1 : 1;
}
$a = array(3, 2, 5, 6, 1);
usort($a , "cmp");
foreach ($a as $key => $value) {
echo "$key : $value <br>" ;
} /*
0 : 1
1 : 2
2 : 3
3 : 5
4 : 6
*/
?>
* 4.6
array_multisort 一次对多个数组进行排序
5. 拆分、合并、分解、接合的数组函数
* 5.1 array_slice() 从数组中取出一段
* 5.2 array_splice() 把数组中的一部分去掉并用其他值代替
* 5.3 array_combine() 创建一个数组,用一个数组的值作为其键名,还有一个数组的值作为其值
* 5.4 array_merge() 合并一个或多个数组
* 5.5 array_intersect() 计算数组的交集
* 5.6 array_diff() 计算数组的差集
6. 数组与数据结构的函数
* 6.1 array_push() array_pop() 使用数据实现堆栈
* 6.2 array_unshift() array_shift() unset() 使用队列
7. 其他与数据操作有关的函数
* 7.1 array_rand() 从数组中随机取出一个或多个单元
* 7.2 shuffle() 将数组打乱
* 7.3 array_sum() 计算数组中全部值的和
* 7.4 range() 建立一个包括指定范围单元的数组
细说php(六) 数组的更多相关文章
- Java基础之十六 数组
数组:可以创建并组装它们,通过使用整型索引值访问它们的元素,并且它们的尺寸不能改变. 16.1 数组为什么特殊 数组与其他种类的容器之间的区别有三方面:效率,类型和保存基本类型的能力. 数组是一种效率 ...
- js之oop <六>数组的crud(增删改)
增 Create: push(); 向数组尾添加元素 var arr = [2,6,8,7,4]; arr.push(100); console.log(arr); //输出 [2,6,8,7,4,1 ...
- java学习笔记六——数组
数组类型 数组是一种常见的数据结构,可用于存放多个数据,每一个数组元素存放一个数据,通常可以通过下标进行访问其元素. Java数组要求所有数组元素具有相同的数据类型.因此,数组元素的数据类型是唯一的. ...
- Java基础语法<六> 数组 Arrays
笔记整理 来源于<Java核心技术卷 I > <Java编程思想> 允许数组长度为0 new element[0] 数组长度为0与null不同 1. 数组拷贝 允许将一 ...
- JAVA基础复习与总结<六> 数组_容器_泛型
数组的常用方法 java.util.Arrays 类能方便地操作数组,它提供的所有方法都是静态的. 具有以下功能: 给数组赋值:通过 fill 方法. 对数组排序:通过 sort 方法,按升序. 比较 ...
- Java系列学习(六)-数组
1.方法: (1)定义: 完成特定功能块的代码,在有些语言中也叫函数 (2)格式: (3)方法的重载 [在同一个类中,方法名相同,参数列表不同,与返回值无关] 2.数组 (1)定义 存储同一种数据类型 ...
- JavaScript 基础(六) 数组方法 闭包
在一个对象中绑定函数,称为这个对象的方法.在JavaScript 中,对象的定义是这样的: var guagua = { name:'瓜瓜', birth:1990 }; 但是,如果我们给瓜瓜绑定一个 ...
- PHP中的数组(二)常用数组处理函数
数组的相关处理函数 一.数组键/值操作有关的函数 1.array_values() 无论是关联的还是索引的返回的都是索引数组 <?php $lamp=array(&quo ...
- js数组(列表)的基本操作
本文主要介绍JS对数组(列表)的基本操作.习惯了用数据库的操作顺序来说明:增.删.改.查:合并,裁剪,排序,格式化. 一.数组元素的添加(增加) 增加数组元素有三种方法:unshift() push ...
随机推荐
- XML的DOM、SAX、DEMO4J及DEMO4J整合Path的代码例子
1.DMO解析 package cn.itcast.xml.dom; import java.io.File; import javax.xml.parsers.DocumentBuilder; im ...
- 用Ant实现Java项目的自动构建和部署(转)
Ant是一个Apache基金会下的跨平台的构件工具,它可以实现项目的自动构建和部署等功能.在本文中,主要让读者熟悉怎样将Ant应用到Java项目中,让它简化构建和部署操作. 一. ...
- asp.net web编程开发将model键值对化
关键字:model属性,反射 正文 model是数据库的映射,在.net web开发中,作为程序的最底层.web开发的一切都是基于数据库的,分了层之后,就基于model了. 为什么要将 ...
- Intent 能传递的数据类型
1. Serializable,将对象序列化成二进制数据传递 2. charsequence: 主要用来传递String,char等 3. parcelable: 这个android提供的一种新的类型 ...
- 不用标准库实现memmove,借助一个缓冲区temp,即使src和dest所指的内存有重叠也能正确拷贝
void *mymemmove(void *dest,const void *src,size_t count) { char temp[count]; int i; char *d=(char *) ...
- PHP获取图片颜色值,检测图片主要颜色的代码:
<?php $i=imagecreatefromjpeg("photo3.jpg");//测试图片,自己定义一个,注意路径 for ($x=0;$x<imagesx($ ...
- python django学习资料网站
python module 模块 https://docs.python.org/2.7/py-modindex.html django框架例子 https://docs.djangoproject. ...
- 创建区域Areas,添加TagHelper
创建区域Areas,添加TagHelper 目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 在Asp.net Core VS2015中,我们发现还有很多不太简便的地方,比如右 ...
- ubuntu "mkdir -p"命令
mkdir的-p选项允许你一次性创建多层次的目录,而不是一次只创建单独的目录.例如,我们要在当前目录创建目录Projects/a/src,使用命令: mkdir -p Project/a/src 而不 ...
- Netbeans 注释模板配置
工具->模板->展开Java 选中Java类->在编辑器中打开 修改如下: <#if package?? && package != ""& ...