PHP中的数组(一)
一.数组的概述
1.数组的本质:管理和操作一组变量
2.数组是复合类型
3.数组中可以存储任意长度的数据,也可以存储任意类型的数据
4.数组就可以完成其它语言数据结构的功能(链表,队列,栈,集合类)
二.数组的分类
数组中存有多个单元(单元称为元素)
每个元素都是由下标(键)和值组成
单独访问元素时,都是通过下标(键)来访问元素
1.一维数组,二位数组,多维数组(数组的数组)
2.PHP中有两种数组
索引数组:就是下标是顺序整数作为索引
关联数组:就是下标是字符串作为索引
下标(整数或字符串)
三.数组多种声明方式
1.直接为数组元素赋值
a.如果索引下标不给出,就会从0开始顺序索引
b.如果给出索引下标,下一个就会是从最大的增一
c.如果后面出现前面的下标,如果是赋值就是为前面的元素重新赋值
<?php //索引数组 直接声明 $user[]=1; $user[0]="zhangsan"; $user[9]=10; $user[2]="nan"; $user[]="aa@bb.com"; echo '<pre>'; print_r($user); echo '<pre>'; ?>
<?php //关联数组 直接声明 $user["id"]=1; $user["name"]="zhangsan"; $user["age"]=10; $user["sex"]="nan"; $user["email"]="aa@bb.com"; echo '<pre>'; print_r($user); echo '<pre>'; ?>
2.使用array()函数
a.默认是索引数组
b.如果为关联数组和索引数组指定下标,使用键=>值
c.多个成员之间使用逗号分隔
<?php
//使用array声明默认为索引数组
$user=array(1,"zhangsan",10,"nan","aa@bb.com");
//使用关联数组
$user1=array("id"=>2,"name"=>"lisi","age"=>20,"sex"=>"nan","email"=>"aa@bb.com");
echo '<pre>';
print_r($user);
echo '<pre>';
echo '<pre>';
print_r($user1);
echo '<pre>';
?>
二维数组
<?php
$user=array(
array(1,"zhangsan","nan"),
array(2,"lisi","nv"),
array(3,"wangwu","nan")
);
echo $user
echo '<pre>';
print_r($user);
echo '<pre>';
echo $user[1][1];
?>
三维数组
<?php
//声明一个三维数组
$info=array(
"user"=>array(
array(1,"zhangsan","nan"),
array(2,"lisi","nv"),
array(3,"wangwu","nan")
),
"score"=>array(
array(1,100,90,80),
array(2,80,90,70),
array(3,60,50,86)
),
"connect"=>array(
array(1,'110',"aaa@qq.com"),
array(2,'120',"bbb@qq.com"),
array(3,'119',"ccc@qq.com")
)
);
//输出bbb@qq.com
echo $info[connect][1][2];
echo '<pre>';
print_r($info);
echo '<pre>';
?>
3.使用其他函数声明
四.数组的遍历
1.使用for循环遍历数组
a.其它语言(只有这一种方式)
b.PHP中这种方式不是我们的首选
c.数组必须是索引数组,而且下标还必须是连续的
(索引数组下标还可以不连续,数组我们有时还要使用关联数组)
<?php
$user=array(1,"zhangsan",19,"nan");
for($i=0;$i<count($user);$i++){
echo "\$user[$i]=".$user[$i]."<br>";
}
?>
2.使用foreach语句循环遍历数组
foreach(数组变量 as 变量值){
//循环体
}
foreach(数组变量 as 下标变量=>值变量){
//循环体
}
a.循环次数由数组的元素个数决定
b.每一次循环都会将数组中的元素分别赋值给后面的变量
foreach 遍历一维数组
<?php
$user=array(1,"name"=>"zhangsan","age"=>19,"nan");
foreach($user as $var){ //$var是自定义变量
echo $var."<br>";
}
foreach($user as $key=>$var){ //$var是自定义变量
echo $key."---".$var."<br>";
}
?>
foreach遍历三维数组
<?php
//声明一个三维数组
$info=array(
"user"=>array(
array(1,"zhangsan","nan"),
array(2,"lisi","nv"),
array(3,"wangwu","nan")
),
"score"=>array(
array(1,100,90,80),
array(2,80,90,70),
array(3,60,50,86)
),
"connect"=>array(
array(1,'110',"aaa@qq.com"),
array(2,'120',"bbb@qq.com"),
array(3,'119',"ccc@qq.com")
)
);
//遍历三维数组
foreach($info as $tableName=>$table){
echo '<table border="1" width="500" align="center">';
echo '<caption><h1>'.$tableName.'</h1></caption>';
foreach($table as $row){
echo '<tr>';
foreach($row as $col){
echo '<td align="center">'.$col.'</td>';
}
echo '</tr>';
}
echo '</table>';
}
?>
3.while() list() each()组合循环遍历数组
each()函数
a.需要一个数组作为一个参数
b.返回来的也是一个数组
c.返回来的数组是0,1,key,value四个下标
0和key下标是当前参数数组元素的键
1和value下标是当前对数数组元素的值
d.默认当前元素就是第一个元素
e.每执行一次后就会将当前元素向后移动
f.如果到最后的元素再执行这个函数,则返回false
<?php
$user=array("id"=>1,"name"=>"zhangsan","age"=>10,"sex"=>"nan");
$a=each($user);
print_r($a); //Array ( [1] => 1 [value] => 1 [0] => id [key] => id )
echo "<br>";
$b=each($user);
print_r($b); //Array ( [1] => zhangsan [value] => zhangsan [0] => name [key] => name )
?>
while和each()函数结合使用
<?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>";
}
?>
list()函数
a.list()=array(); 需要讲一个数组赋值给这个函数
b.数组中的元素个数,要和list()函数中的参数个数相同
c.数组中的每个元素值会赋值list()函数中的每个参数,list()将每个参数转为变量。
d.list()只能接受索引数组
e.按索引下标的顺序
<?php
list($name,$age,$sex)=array("zhangsan","20","nan");
echo $name."<br>";
echo $age."<br>";
echo $sex."<br>";
$user=array("id"=>1,"name"=>"zhangsan","age"=>10,"sex"=>"nan");
list($key,$value)=each($user);
echo $key."-->".$value;
?>
使用数组的内部指针控制函数
next(数组); 指针移动到下一个,并返回当前元素的值
prev(数组); 指针移动到上一个,并返回当前元素的值
rest(数组); 指针移动到头一个
end(数组); 指针移动到最后一个
current(数组); 获取当前元素的值
key(数组); 获取当前元素的键
while()、list()、each()结合使用
<?php
$user=array("id"=>1,"name"=>"zhangsan","age"=>10,"sex"=>"nan");
while(list($key,$value)=each($user)){
echo $key."==>".$value."<br>";
}
reset($user);
next($user);
echo prev($user);
?>
五.预定义数组
自动全局变量
1.包含了来自web服务器,客户端,运行环境和用户输入的数据
2.这些数组比较特别,全局范围内自动生效,都可以直接使用这些数组。
3.用户不能自定义这些数组,但这些数据操作方式又和我们自定义的数组操作方式一样
4.在函数中直接可以使用这些数组
$_GET 经由URL请求提交至脚本的变量
$_POST 经由HTTP POST方法提交到脚本的变量
$_REQUEST 经由GET POST COOKIE机制提交到脚本的变量,因此该数组并不值得信任,尽量不要使用。
$_FILES 经由HTTP POST文件上传而提交至脚本
$_COOKIE 会话控制
$_SESSION 会话控制
$_ENV 执行环境提交脚本的变量
$_SERVER 变量由web服务器设定的或直接和当前脚本的执行环境相关联
$GLOBALS 只要是当前脚本有效的变量都在这里,数组的键名为全局变量的名称
PHP中的数组(一)的更多相关文章
- 前端开发:Javascript中的数组,常用方法解析
前端开发:Javascript中的数组,常用方法解析 前言 Array是Javascript构成的一个重要的部分,它可以用来存储字符串.对象.函数.Number,它是非常强大的.因此深入了解Array ...
- JavaScript jQuery 中定义数组与操作及jquery数组操作
首先给大家介绍javascript jquery中定义数组与操作的相关知识,具体内容如下所示: 1.认识数组 数组就是某类数据的集合,数据类型可以是整型.字符串.甚至是对象Javascript不支持多 ...
- java 在循环中删除数组元素
在写代码中经常会遇到需要在数组循环中删除数组元素的情况,但删除会导致数组长度变化. package com.fortunedr.thirdReport; import java.util.ArrayL ...
- Objective-C中把数组中字典中的数据转换成URL
可能上面的标题有些拗口,学过PHP的小伙伴们都知道,PHP中的数组的下标是允许我们自定义的,PHP中的数组确切的说就是键值对.而在OC我们要用字典(Dictionary)来存储,当然了Java用的是M ...
- GCC 中零长数组与变长数组
前两天看程序,发现在某个函数中有下面这段程序: int n; //define a variable n int array[n]; //define an array with length n 在 ...
- C++中的数组
数组名作为参数时,传递的是数组的首地址, 主调函数中实参数组元素个数不应该少于形参数组的元素个数 把数组名作为参数时,一般不指定数组第一维的大小 即使指定,编译时也会被忽略的.
- javascript中关于数组的一些鄙视题
一.判断一个数组中是否有相同的元素 /* * 判断数组中是否有相同的元素的代码 */ // 方案一 function isRepeat1(arrs) { if(arrs.length > 0) ...
- Oc中的数组
========================== 数组 ========================== 一.认识数组 oc中可以把NSObject对象的子类放到数组这个集合中,但是int.f ...
- Javascript中判断数组的正确姿势
在 Javascript 中,如何判断一个变量是否是数组? 最好的方式是用 ES5 提供的 Array.isArray() 方法(毕竟原生的才是最屌的): var a = [0, 1, 2]; con ...
- C#中的数组,多维数组和交错数组
想研究一些面向对象的东西,也许是代码写得还不够多.感觉还不好,看那些教程,不是嫌太水就是太难看不懂.心情很是落寞 不过再怎样也要坚持每天发一篇博客. 这篇来说一下C#中的数组,多维数组,交错数组的一些 ...
随机推荐
- c/c++----网站及其后门(CGI应用程序)
C/C++学习到这儿,结合自己曾经学过的javasweb知识,现在让我们来看看,如何做一个CGI程序吧! 首先了解一下啥子叫CGI :CGI全称是“公共网关接口”(Common Gateway In ...
- Jquery元素追加和删除
原文链接:http://www.cnblogs.com/william-lin/archive/2012/08/12/2635402.html 介绍 DOM是Document Object Mo ...
- 伪静态<-> 动态页,伪静态,真静态的比较和选择
动态页,伪静态,真静态优缺点的比较 动态页不利于SEO优化. 动态页常常因为传参数的缘故后面会带一连串的问号.而搜索引擎会因为里面问号导致死循(机器人陷阱Spidertraps),所以带问号的地址搜索 ...
- spring配置带参数的视图解析器:ParameterMethodNameResolver
1.配置处理器 <!-- 处理器 --> <bean id="myController" class="cn.cnsdhzzl.controller.M ...
- DB2存储过程语法规则
如何声明一个存储过程CREATE PROCEDURE 存储过程名(IN 输入变量名 输入变量类型,OUT 输出变量名 输出变量类型)紧跟其后的是存储过程属性列表 常用的有:LAN ...
- Shell脚本:使用rsync备份文件/目录
本文我们介绍一个shell脚本,用来使用rsync命令将你本地Linux机器上的文件/目录备份到远程Linux服务器上.使用该脚本会以交互的方式实施备份,你需要提供远程备份服务器的主机名/ip地址和文 ...
- mySql常用sql
mysql sql语句大全1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql server- ...
- ios应用数据存储的常用方式 ios7.1应用沙盒
归档:用某种格式保存某个对象,又称持久化. 1XML 属性列表plist归档(持久化) 2Preference(偏好设置) 3NSKeyedArchiver归档 4SQLite3 5Core Data ...
- [pjsip]Pjlib中配置文件config.h解析
config_site.h 这个头文件包含在config.h中,用于引入平台?(site)/用户特定的配置以控制PJLIB的特性,用户需要自己生成这个文件. 譬如说我们要把PJLIB编译成DLL,那么 ...
- IntelliJ IDEA 12.0
User name:JavaDeveloper Serial number:92547-KY2BB-QZ0S1-PEZCV-HUT8Q-6RYY4