细说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 ...
随机推荐
- 设计模式(Java版)-创建型模式之简单工厂模式
前言:这段时间在学习设计模式,本人也是小菜一枚(所以写的如果有错误的地方请大大们给予指出).这个东西也是我一直想学习的,从点点滴滴做起,记录下自己每天的领悟! 一.工厂模式的动机 在软件系统中,经常面 ...
- C# 泛型多种参数类型与多重约束 示例
C# 泛型多种参数类型与多重约束 示例 interface IMyInterface { } class Dictionary<TKey, TVal> where TKey : IComp ...
- Python序列的方法(转)
在快速教程中,我们了解了最基本的序列(sequence).回忆一下,序列包含有定值表(tuple)和表(list).此外,字符串(string)是一种特殊的定值表.表的元素可以更改,定值表一旦建立,其 ...
- netstat 命令详解
netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表.实际的网络连接以及每一个网络接口设备的状态信息,在我的计算机上执行netstat后,其输出结果为:netstat命令是一 ...
- JQuery动态增加删除元素
<form action="" method="post" enctype="multipart/form-data"> < ...
- JavaScript toString() 函数详解
toString()函数用于将当前对象以字符串的形式返回. 该方法属于Object对象,由于所有的对象都"继承"了Object的对象实例,因此几乎所有的实例对象都可以使用该方法. ...
- 对于数据操作的SQL语句精粹(长期更新)
--删除空格 Update [Table] Set [Column]=Replace([Column],' ','') --查出左右和右边带空格的数据 select RTRIM( LTRIM([Col ...
- 文成小盆友python-num8 面向对象中的成员,成员修饰符,特殊成员,异常处理,设计模式之单例模式
本节主要内容: 1.面向对象中的成员 2.成员修饰符 3.特殊成员 4.异常处理 5.设计模式之单例模式 一.面向对象中的成员(类的成员) 类的成员总共可以分为3大类,每类中有不同的分支. 1.总述, ...
- JAVA回调函数ANDROID中典型的回调地方
在计算机中回调函数是指通过函数参数传递到其他代码类的,某一块可执行代码的引用,这以设计允许了底层代码调用者在高层定义的子程序. 在JAVA里面我们使用接口的方式来实现函数的回调. 回调的通俗就是:程序 ...
- iOS之UISearchBar实时显示结果
iOS之UISearchBar实时显示结果 UISearchBar 经常是配合UITableView 一起使用的,一般都将UITableView的tableHeaderView属性设置为UIS ...