php中的数组

1.数组的定义:
显式方式:$arr = array(1,2,3,4,5);
$arr1 = array('name'=>'dqrcsc','age'=>'24');
隐式方式:$arr[]=1;$arr[]=2;
注意:array() 是一个语言结构,用于字面上表示数组,不是常规的函数。

2.关于php数组的索引:
语法“index => values”,用逗号分开,定义了索引和值。索引可以是字符串或数字。
如果省略了索引,会自动产生从 0 开始的整数索引。如果索引是整数,则下一个产生的索引将是目前最大的整数索引 + 1。
注意如果定义了两个完全一样的索引,则后面一个会覆盖前一个。
此外,php数组的索引有如下转换规则:
此外 key 会有如下的强制转换:
1) 包含有合法整型值的字符串会被转换为整型。例如键名 "8" 实际会被储存为 8。但是 "08" 则不会强制转换,因为其不是一个合法的十进制数值。
2) 浮点数也会被转换为整型,意味着其小数部分会被舍去。例如键名 8.7 实际会被储存为 8。
3) 布尔值也会被转换成整型。即键名 true 实际会被储存为 1 而键名 false 会被储存为 0。
4) Null会被转换为空字符串,即键名 null 实际会被储存为 ""。
5) 数组和对象不能被用为键名。坚持这么做会导致警告:Illegal offset type。
<?php
$array = array(
1 => "a" ,
"1" => "b" , //索引转换为整型的1
1.5 => "c" , //索引转换为整型的1
true => "d" , //索引转换为整型的1
);
var_dump ( $array );
?>
以上例程会输出:
array(1) {
[1]=>
string(1) "d"
}

3.数组的遍历:
count():返回数组元素的个数(长度)
1)使用for循环对索引数组进行遍历:
$len = count($arr);
for($i=0; $i<$len; $i++){ $arr[$i]...}
2)使用foreach遍历关联数组:
foreach(数组 as $value){
//使用$value当做当前元素的值
}
foreach(数组 as $key => $value){
//使用$key当做当前元素的下标
//使用$value当做当前元素的值
}
若在遍历过程中要修改数组元素的值,可以使用&进行引用传值:
foreach ( $arr as & $value ) {
$value = $value * 2 ;
}

3)数组指针:
每个数组都有一个指针(定位符),默认指向数组的第一个元素。如果在对数组进行遍历,那么该指针会在访问指针当前所指向的元素
之后,向后移动,指向下一个元素的地址。遍历完最后一个元素,指针会继续下移,从而移出当前数组空间,再次对数组元素进行访问
的时候,返回FALSE。

4)使用函数each()进行数组遍历:
each():每次从数组中获取当前数组指针所指向的元素,返回一个有四个元素的数组(关联+索引),并且将数组的指针下移一位
list是一个语法结构,将得到的数组里的元素,必须是以0开始的索引元素,对应的赋值给list所指定的变量里。
语法:list($name,$age,$gender) = array('dqrcsc',24,'男');
相当于$name = 'dqrcsc';$age = 24; $gender = '男';
因为each返回的结果里有两个索引元素0和1,所以一般使用list与each进行配对使用

5)关于数组的常用函数:
key():获取数组当前指针所指向元素的索引
current():获取数组指针所指向的元素的值
next():返回数组当前指针所指向的下一个的元素的值,并指针下移一位
prev():返回当前指针所在位置的前一个元素的值,并且将指针向前移动一位
注意:如果当前指针已经在数组元素的最后一个元素,那么next返回FALSE,指针依然下移一位,移出了数组;同样的,当前指针已经在
数组元素的第一个元素,那么使用prev将会将数组的指针移出数组,返回FALSE。next()和prev()都无法将移出数组的指针再拉回到合
法的位置。
以下两个函数可用于重置数组指针:
reset():重置数组的指针,让数组指针指向第一个元素,如果成功返回第一个元素的值,失败返回FALSE
end():获取数组元素最后一个元素的值,指针也会指向最后一个元素
注意:如果数组第一个元素被删除,那么指针重置之后,是第二个元素(从第一个有效元素开始)。
array_keys():获取数组的所有下标,返回一个索引数组,数组元素的值都是目标数组的下标
array_values():获取数组所有的值,返回一个索引数组
array_push():从数组的尾端加入一个元素(模拟入栈)
array_pop:从数组的尾端弹出一个元素(模拟出栈)
array_shift:从数组头部将数组元素移出(模拟出队)
array_unshift:从数组的头部插入数据(模拟入队)
数组与字符串之间的转换:
explode():将字符串按照指定的分隔符分解成一系列小的字符串,都成为数组的一个元素
implode():将一个数组里的所有的元素按照某个分隔符进行拼接,变成一个字符串
range():按照ASCII码能够指定范围,自动生成数组元素的函数
array_rand():从数组中随机取出指定个数的元素下标
shuffle():将原来的数组里的元素打乱
数组的合并:+和array_merge()
+:保存第一个数组的所有元素,如果后面的数组的元素与前面数组的元素的下标相同,那么就忽略,如果不同则加到第一个数组里,
最终返回一个数组
array_merge():先保留第一个数组的所有元素,如果后面数组的元素与前面数组的元素关联下标相同则用后面数组的元素覆盖前面的
;如果是索引下标,直接添加到第一个数组后面,重置索引。

php学习笔记7--php中的数组的更多相关文章

  1. 并发编程学习笔记(4)----jdk5中提供的原子类及Lock使用及原理

    (1)jdk中原子类的使用: jdk5中提供了很多原子类,它会使变量的操作变成原子性的. 原子性:原子性指的是一个操作是不可中断的,即使是在多个线程一起操作的情况下,一个操作一旦开始,就不会被其他线程 ...

  2. [学习笔记] 在Eclipse中导入项目

    参考前文:[学习笔记] 在Eclips 中导出项目 选择已经导出的文件: 导入之后,项目结构如下: 至此,完成.

  3. CockroachDB学习笔记——[译]CockroachDB中的SQL:映射表中数据到键值存储

    CockroachDB学习笔记--[译]CockroachDB中的SQL:映射表中数据到键值存储 原文标题:SQL in CockroachDB: Mapping Table Data to Key- ...

  4. [学习笔记] 在Eclipse中导出可以直接运行的jar,依赖的jar中的类解压后放在运行jar中

    前文: [学习笔记] 在Eclipse中导出可以直接运行的jar,依赖的jar打在jar包中 使用7z打开压缩包,查看所有依赖的jar都被解压以包名及class的方式存储在了运行jar中,此时jar的 ...

  5. [学习笔记] 在Eclipse中导出可以直接运行的jar,依赖的jar打在jar包中

    本文需要参考前文: [学习笔记] 在Eclipse中导出可以直接运行的jar,依赖的jar在子目录中 上文是导出的运行的依赖jar被放在了子目录中,本文是将依赖jar放在可运行jar的本身,这样发布的 ...

  6. [学习笔记] 在Eclipse中导出可以直接运行的jar,依赖的jar在子目录中

    工程创建可参考前文: [学习笔记] 在Eclipse中使用Hibernate,并创建第一个工程,数据库为Oracle XE 在工程上鼠标右键: 找到java 选择 Runable JAR file N ...

  7. Web安全学习笔记 SQL注入中

    Web安全学习笔记 SQL注入中 繁枝插云欣 --ICML8 权限提升 数据库检测 绕过技巧 一.权限提升 1. UDF提权 UDF User Defined Function,用户自定义函数 是My ...

  8. matlab学习笔记12_2创建结构体数组,访问标量结构体,访问非标量结构体数组的属性,访问嵌套结构体中的数据,访问非标量结构体数组中多个元素的字段

    一起来学matlab-matlab学习笔记12 12_2 结构体 创建结构体数组,访问标量结构体,访问非标量结构体数组的属性,访问嵌套结构体中的数据,访问非标量结构体数组中多个元素的字段 觉得有用的话 ...

  9. Backbone学习笔记一Backbone中的MVC

    原文章地址http://bigdots.github.io/2015/12/01/Backbone学习笔记(一)/#more Backbone.js为复杂WEB应用程序提供模型(models).集合( ...

  10. Julia 学习笔记(一):数组

    个人向,只会记录一些需要注意的点. 前言 学习 Julia 已经有一段时间了,但是进步缓慢.这一方面是最近代码写得少,一方面是 Julia 学习资料少.中文资料更少,但也有我没做笔记的缘故导致学习效率 ...

随机推荐

  1. CORTEX -M3 : Registers in depth

    http://www.zembedded.com/cortex-m3-registers-in-depth/ Thanks for the overwhelm response you show in ...

  2. App Submission Issues

    查看原文: http://leancodingnow.com/app-submission-issues/ I bet many iOS developers are busy submitting ...

  3. Citrix 服务器虚拟化之二十八 XenApp6.5发布文档内容

    Citrix 服务器虚拟化之二十八  XenApp 6.5发布文档内容 XenApp可发布以下类型的资源向用户提供信息访问,这些资源可在服务器或桌面上虚拟化: 1)  服务器桌面:发布场中服务器的整个 ...

  4. 实现顶部轮播,下部listview经典布局的两种方式

    开头: 在做android开发的时候,我们经常会遇到这样的布局,上面是一个图片轮播图,下面是一些列表的项目.很多新闻app,视频类app都采用这样的布局.起初的时候 由于没有很多参考,我自己想到了一种 ...

  5. iOS开发——实战总结OC篇&网易彩票开发知识点总结

    网易彩票开发知识点总结 关于网易彩票开发中遇到了不少的坑,弄了好久才弄懂,或者有些犹豫很久没用就不记得了,所以这里就总结了一下,希望以后不会忘记,就算忘记也能快速查看! /************** ...

  6. UVA 1069 - Always an integer(数论)

    1069 - Always an integer 题意:给定一个多项式,推断是否总是整数 思路:LRJ大白上的例题,上面给出了证明,仅仅要1到k + 1(k为最高次数)带入方程都是整数,那么整个方程就 ...

  7. django schema migration

    syncdb 仅仅能初始化table(create),不能自己主动update/delete/drop. 那么south应运而生. south简单使用方法: 安装: pip install South ...

  8. js判断加载大小页面

    大页面里的js: <script> function jmp(){ var w = document.body.clientWidth; if( w > window.screen. ...

  9. Servlet 3.0 新特性

    Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布.该版本在前一版本(Servlet 2.5)的基础上提供了若干新特性用于简化 Web 应用的开发 ...

  10. 乱谈Qt事件循环嵌套

    本文旨在说明:QDialog::exec().QMenu::exec()等开启的局部事件循环,易用的背后,还有很多的陷阱... 引子 Qt 是事件驱动的,基本上,每一个Qt程序我们都会通过QCoreA ...