PHP数组的分类

按照下标的不同,PHP数组分为关联数组与索引数组:
  索引数组:下标从0开始,依次增长;
  关联数组: 下标为字符串格式,每个下标字符串与数组的值一一关联对应。(有点像对象的键值对)

关于关联数组和索引数组:

1、数组中,可以同时存在索引数组与关联数组;
  array(1,2,3,"one"=>4);

2、数组中,所有的索引数组,如果不加指定,会去掉关联项,默认增长(即,关联数组不占索引位);
  array(1,2,"one"=>3,4,5); //1,2,4,5的索引-->0/1/2/3

3、如果,关联数组的key,是纯十进制整数字符串,则会将此数字转为索引数组的索引值;("10.0"/"08"等格式,仍然是关联数组,不转为索引)
  array(1,2,"one"=>3,"9"=>4,"010"=>5);// 1,2,4的索引-->0/1/9

4、 手动指定关联数组的key、索引数组的下标,如果与前面已有的key或下标重复,则后制定的值会覆盖之前的值;
  array(1,"one"=>2,0=>5,"one"=>6); --> 打印数组:0=>5,"one"=>6

5、如果手动指定索引数组下标,则后续自增长下标 ,会按照之前下标最大值,依次增长;
  array(1,2,7=>3,4);--> 1,2,3,4的下标-->0/1/7/8

$arr1 = array(1,2,3,4,5,6,7); // 索引数组
var_dump($arr1); $arr2 = array("one"=>1,"two"=>2,"three"=>3); // 关联数组
var_dump($arr2); $arr3 = array(1,"one"=>2,3,5=>4,5,6,"10.0"=>7,"08"=>8,"08"=>10,"haha"=>9);
var_dump($arr3);

数组的声明方式

1、直接赋值声明:

$arr[]=1;
$arr[]=2;
$arr[8]=3;
$arr[]=4;
$arr[4]=5;
$arr[]=6;
var_dump($arr);

2、使用字面量[]声明,这种声明方式从PHP5.4开始

$arr = [1,2,3,4,"one"=>54,6];
var_dump($arr);

3、使用array()声明,没有new关键字

$arr = array(1,2,3,4,5);
var_dump($arr);

数组元素的读取

PHP中数组下标的读取,支持使用[]和{}

var_dump($arr[0]);
var_dump($arr{0});

多维数组

1、如果一个数组中的值依然是数组,那么数组就是多位数组:
2、多维数组,并不是要求每个项目都是数组:
3、多维数组嵌套一般不超过3层。

$h51701 = array(
"group1"=>array(
array("name"=>"张三","age"=>14,"sex"=>"男"),
array("name"=>"张三","age"=>14),
array("name"=>"张三"),
"groupName"=>"一组"
),
"group2"=>array(
array("name"=>"张三","age"=>14,"sex"=>"男"),
array("name"=>"张三","age"=>14,"sex"=>"男"),
array("name"=>"张三","age"=>14,"sex"=>"男")
),
"group3"=>array(
array("name"=>"张三","age"=>14,"sex"=>"男"),
array("name"=>"张三","age"=>14,"sex"=>"男"),
array("name"=>"张三","age"=>14,"sex"=>"男")
)
);
var_dump($h51701);

数组的遍历

1、使用for循环遍历数组
  conut($arr);用于统计数组元素的个数。

for循环只能用于遍历,纯索引数组!!!!
如果存在关联数组,count统计时会统计两种数组的总个数,使用for循环遍历混合数组,导致数组越界!!

$arr = array(1,2,3,5,6,7);
$num = count($arr);//count最好放到for外面,可以让函数只执行一次
echo "数组元素的个数{$num}<br/>";
for($i=0;$i<$num;$i++){
echo "{$i}==>{$arr[$i]}<br/>";
}

2、forEach循环遍历数组
foreach可以遍历任何类型的数组!!!

$arr = array(1,2,3,"one"=>4,5,6,7);
foreach($arr as $item){
echo "{$item}<br>";
}
foreach($arr as $key => $item){
echo "{$key}==>{$item}<br>";
}

3、使用list()、each()、while()遍历数组

list():用于将数组的每一个值,赋值给list函数的每一个参数。(list函数的参数,必须小于等于数组的元素个数);

list($a,$b,$c)=[1,2,3];-->$a=1; $b=2; $c=3;

注意:
  ① list在解析数组时,只能解析索引数组;
  ② list() 可以通过空缺参数,选择性的解析数组的值;
  list($a,$b,,$c)=[1,2,3,4]; -->$c=4

each(): 用于返回数组当前指针所在位的键值对!并将指针后移一位!
返回值:如果指针有下一位,则返回一个数组,数组包含一对关联项("key"-键,"value"-值)和一对索引项(0-键,1-值)
如果指针没有下一位u,返回false。

使用list()/each()/while()配合遍历数组:

while(list($key,$value) = each($arr)){
echo "{$key}-->{$value}<br>";
}
reset($arr);

4、 使用数组指针遍历数组
  ① next:将数组指针,后移一位。并返回后一位的值;没有返回false
  ② prev:将数组指针,前移一位。并返回前一位的值;没有返回false
  ③ end: 将数组指针,移至最后一位,返回最后一位的值;空数组返回false
  ④ reset:将数组指针,恢复到第一位。并返回第一位的值;空数组返回false
  ⑤ key: 返回当前指针所在位的键;超出返回null。
  ⑥ current:返回当前指针所在位的值;超出返回false。

$arr = [1,2,3,""=>false,"one"=>5];
while(true){
echo key($arr);
echo "--";
echo current($arr);
echo "<br>";
//key===null用于排除数组包含空值,导致next返回值为false的情况;
if(!next($arr)&&key($arr)===null){
break;
}
}
reset($arr);
do{
echo key($arr);
echo "--";
echo current($arr);
echo "<br>";
}while(next($arr));
reset($arr);

超全局数组

PHP给我们提供了一组更能强大的超全局数组。可以在任何地方、任何作用域,而且无需声明,直接可用。

1、服务器变量: $_SERVER
  $_SERVER返回包含浏览器头信息、路径、脚本以及服务器系统的各种信息。

2 、环境变量:$_ENV
  返回电脑系统中所有环境变量值
 计算机---右击属性---高级系统设置---环境变量(windows系统)
 PHP中,此全局变量默认是关闭的,需要修改php.ini文件,将variables_order = "GPCS"该为variables_order = "EGPCS"可以开启这个全局变量
 但是,开启后会有系统性能损耗,官方不支持开启
 可以使用getenv()函数取代这个超全局数组,读取单个环境变量
 phpinfo()函数返回关于PHP的各种信息,其中的Enviroment就表示系统环境变量,可以使用getenv()取到其中的任何一个值

3、HTTP GET变量:$_GET
  获取前台通过get请求发送的数据

4 HHTP POST变量:$_POST
  获取前台通过post请求发送的数据

5、 request变量:$_REQUEST;
  默认情况下包含了 $_GET,$_POST 和 $_COOKIE 的数组。 
  由于$_REQUEST同时包含get和post,可能导致get和post的键冲突,并且效率也不高,所有,并不使用request。

6、 HTTP文件上传变量:$_FILES;
  通过 HTTP POST 方式上传到当前脚本的项目的数组。

7、 HTTP Cookies:$_COOKIE;
  获取当前页面cookie信息;(可以手动setcookie("",""),可赋值);

8、 Session变量:$_SESSION;
  $_SESSION:取到保存在session中的信息。

9、 Global变量:$GLOBALS;
  $GLOBALS包含了上述所有全局数组,可以通过$GLOBALS["$_SERVER"]取到$_SERVER;

PHP基础入门(三)【PHP中的数组】的更多相关文章

  1. Swift语法基础入门三(函数, 闭包)

    Swift语法基础入门三(函数, 闭包) 函数: 函数是用来完成特定任务的独立的代码块.你给一个函数起一个合适的名字,用来标识函数做什么,并且当函数需要执行的时候,这个名字会被用于“调用”函数 格式: ...

  2. C#基础入门 三

    C#基础入门 三 类 类使用class关键字进行声明,前面加一个访问修饰符,public class car{} 访问修饰符:修师傅可以用来修饰类和类成员等,控制它们的可见度 修饰符关键字分别为:pu ...

  3. javascript基础入门之js中的数据类型与数据转换01

    javascript基础入门之js中的数据结构与数据转换01 js的组成(ECMAScript.BOM.DOM)        js中的打印语句:        数据类型        变量      ...

  4. javascript基础入门之js中的结构分支与循环语句

    javascript基础入门之js中的结构分支与循环语句 程序的结构①顺序结构:自上而下:②选择(分支)结构:多条路径,根据不同的条件,只执行其中一个:③循环结构:重复某些代码④配合特定的语句实现选择 ...

  5. PHP基础入门(四)---PHP数组实用基础知识

    PHP数组 数组是特殊的变量,它可以同时保存一个以上的值. ***关键词:数组基础.数组遍历.超全局数组.数组功能.数组函数. 下面来和大家分享一下有关PHP的数组基础知识,希望对你PHP的学习有所帮 ...

  6. jQuery基础学习(三)—jQuery中的DOM操作

    一.查找节点      查找属性节点: 通过jQuery的选择器来完成.      操作属性节点: 调用jQuery对象的attr()来获取它的属性值.      操作文本节点: 通过text()方法 ...

  7. C#学习笔记---基础入门(三)

    泛型<T> 使用泛型能够最大限度的重用代码/保护类型安全,提高性能 泛型成员因为类型的不确定性,不能使用算术运算符/比较运算符 类型参数可以有多个,可以是编译器能够识别的任何类型 类型参数 ...

  8. Oracle基础入门(三)

    一:PLsql一些基本操作 调节plsql的字体大小 二:创建表,如果学过sql server的数据库就会发现其实Oracle跟的一些新建表和新增修改其实是差不多的 新建表 Create table ...

  9. JS基础入门篇(十)— 数组方法

    1.join 作用: 将数组通过指定字符拼接成字符串.语法: string arr.join([separator = ',']);参数: separator可选,如果省略的话,默认为一个逗号.如果 ...

  10. python基础(三)列表、数组、字典

    列表与元组 列表是最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 定义列表 1 >>> names = ['wangeq','zlx','jack','rose ...

随机推荐

  1. windows phone 模拟器

    window phone 模拟器启动报错 修改Bios设置,我的是yoga pro 2,只修改 即可.启动成功

  2. AMD、CMD、CommonJs规范

    AMD.CMD.CommonJs规范 将js代码分割成不同功能的小块进行模块化的概念是在一些三方规范中流行起来的,比如CommonJS.AMD和CMD.接下来我们看一下这几种规范. 一.模块化规范 C ...

  3. Erlang游戏服设计总结

    这主要是一年多来,个人从事Erlang游戏服开发中对一些事情的思考. 想到哪说到哪,没有条理可言. 欢迎讨论. 通常Erlang游戏服务的设计涉及到的东东包括如下: 任务系统 活动系统 公会系统 玩法 ...

  4. 【Windows 10 应用开发】细说文本资源文件(resw)

    最近,小戏骨版<红楼梦>很是火热,老周一口气看完了9集,一直看到 Surface 的风扇呼呼响.林黛玉和薛宝钗这两个角色都演得不怎么样,倒是演史湘云的娃娃演得不错,老周甚是喜欢. 于是,昨 ...

  5. VLAN的三种类型及三种属性

  6. Java面向对象 正则表达式

     Java面向对象 正则表达式 知识概要:                (1)正则表达式的特点 (2)正则表达的匹配 (3)正则表达式的切割,替换,获取 (4)正则表达式的练习 正则表达式:符合 ...

  7. 网站常用的一些javascript封装 简化调用

    //用于网页地址参数 //参数中包含出了英文中文数字之外的其他符号时进行编码并在前面加"=="进行标识,否则直接返回 //解码时根据是否含有"=="标识来决定是 ...

  8. C#生成Code128码

    using System; using System.Collections.Generic; using System.Data; using System.Drawing; namespace C ...

  9. 自动化双向数据绑定AngularJs---入门

      前  言   AngularJS,由Misko Hevery 等人创建,后为Google所收购.是一款优秀的前端JS框架,已经被用于Google的多款产品当中.AngularJS有着诸多特性,最为 ...

  10. 使用 Hibernate 和 MySQL 需要知道的五件事

    https://www.thoughts-on-java.org/5-things-you-need-to-know-when-using-hibernate-with-mysql/ 作者:Thorb ...