一、数组概述

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(六) 数组的更多相关文章

  1. Java基础之十六 数组

    数组:可以创建并组装它们,通过使用整型索引值访问它们的元素,并且它们的尺寸不能改变. 16.1 数组为什么特殊 数组与其他种类的容器之间的区别有三方面:效率,类型和保存基本类型的能力. 数组是一种效率 ...

  2. js之oop <六>数组的crud(增删改)

    增 Create: push(); 向数组尾添加元素 var arr = [2,6,8,7,4]; arr.push(100); console.log(arr); //输出 [2,6,8,7,4,1 ...

  3. java学习笔记六——数组

    数组类型 数组是一种常见的数据结构,可用于存放多个数据,每一个数组元素存放一个数据,通常可以通过下标进行访问其元素. Java数组要求所有数组元素具有相同的数据类型.因此,数组元素的数据类型是唯一的. ...

  4. Java基础语法<六> 数组 Arrays

    笔记整理 来源于<Java核心技术卷 I > <Java编程思想>   允许数组长度为0 new element[0] 数组长度为0与null不同   1. 数组拷贝 允许将一 ...

  5. JAVA基础复习与总结<六> 数组_容器_泛型

    数组的常用方法 java.util.Arrays 类能方便地操作数组,它提供的所有方法都是静态的. 具有以下功能: 给数组赋值:通过 fill 方法. 对数组排序:通过 sort 方法,按升序. 比较 ...

  6. Java系列学习(六)-数组

    1.方法: (1)定义: 完成特定功能块的代码,在有些语言中也叫函数 (2)格式: (3)方法的重载 [在同一个类中,方法名相同,参数列表不同,与返回值无关] 2.数组 (1)定义 存储同一种数据类型 ...

  7. JavaScript 基础(六) 数组方法 闭包

    在一个对象中绑定函数,称为这个对象的方法.在JavaScript 中,对象的定义是这样的: var guagua = { name:'瓜瓜', birth:1990 }; 但是,如果我们给瓜瓜绑定一个 ...

  8. PHP中的数组(二)常用数组处理函数

    数组的相关处理函数    一.数组键/值操作有关的函数        1.array_values()   无论是关联的还是索引的返回的都是索引数组 <?php $lamp=array(&quo ...

  9. js数组(列表)的基本操作

    本文主要介绍JS对数组(列表)的基本操作.习惯了用数据库的操作顺序来说明:增.删.改.查:合并,裁剪,排序,格式化. 一.数组元素的添加(增加) 增加数组元素有三种方法:unshift()  push ...

随机推荐

  1. DataGrid( 数据表格) 组件[5]

    本节课重点了解 EasyUI 中 DataGrid(数据表格)组件的使用方法,这个组件依赖于Panel(面板).Resizeable(调整大小).LinkButton(按钮).Pageination( ...

  2. C#调用cmd 脚本实例

    1.实例1 public static void TestOne() { Process p = new Process(); p.StartInfo.FileName = "cmd.exe ...

  3. tomcat 显示目录文件列表

    conf/web.xml中,listings改为true,重启 http://liusu.iteye.com/blog/794613 <servlet> <servlet-name& ...

  4. Python番外 事务 那些事

    Transaction 也就是所谓的事务了,通俗理解就是一件事情.从小,父母就教育我们,做事情要有始有终,不能半途而废. 事务也是这样,不能做一般就不做了,要么做完,要么就不做.也就是说,事务必须是一 ...

  5. 阿里云服务器上架设apache php mysql 环境

    由于朋友一公司要做企业站,于是就买了阿里云的服务器.买完进去发现iptables 和selinux默认就是关掉的,可能是因为阿里云有云盾就可以不用自带的防火墙吧,具体配置过程如下(我边配边记录的): ...

  6. C语言结构体(struct)常见使用方法

    基本定义:结构体,通俗讲就像是打包封装,把一些变量有共同特征(比如同属于某一类事物的属性)的变量封装在内部,通过一定方法访问修改内部变量. 结构体定义: 第一种:只有结构体定义 struct stuf ...

  7. data语意学

    引例: class X{}; class Y:public virtual X{}; class Z:public virtual X{}; class A:public Y,public Z{}; ...

  8. pcduino通过sd卡刷系统

    1.登录到pcduino的官网,下载相应的文件. 下载第一个kernel和后面那个ubuntu. 2.将SD卡插入到电脑上,运行下面这个软件: 那个盘符就是你的SD卡的盘符,选择卡量产,镜像文件选上面 ...

  9. DOCKER功能练习

    都是书上的示例,慢慢进入..

  10. 11G在线重建索引

    SQL> select count(*) from test_idx; COUNT(*) ---------- 19087751 SQL> select segment_name,segm ...