PHP中数组定义的几种方法


Posted in PHP onSeptember 01, 2013

Array 数组

PHP 中的数组实际上是一个有序映射。映射是一种把 values 关联到 keys 的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集合,栈,队列以及更多可能性。由于数组元素的值也可以是另一个数组,树形结构和多维数组也是允许的。

PHP定义数组的常用方法

echo "
";
//定义数组的多种方法
//方法一
$array=array('orange','apple','banana');
var_dump($array);//打印数组array
//方法二
$array[]='orange';
$array[]='apple';
var_dump($array);//打印数组array
//方法三
$array=[];//这种不常见,但我觉得很简洁,类似于$array=array();
var_dump($array);//打印数组array
//定义索引数组
//方法四
$array=array(
'orange'=>12,
'apple' =>18,
);
var_dump($array);//打印数组array
//方法五
$array['apple']=18;
var_dump($array);//打印数组array

一般来说定义方法如下面几种:

方法一:

$a=array(1,2,4,5,6);
<?php 
$array=array('a','b','c'); 
$array[]='simon'; 
print_r($array); 
?>

运行结果如下所示。 
Array 

  [0]=>a 
  [1]=>b 
  [2]=>c 
  [3]=>simon 

方法二:

$a=array(key1=>value1,key2=>value2,key3=>value3);

方法三:

$a[key1]=value1;
$a[key2]=value2;

方法四:通过中括号[]定义数组

php 5.4版以后可以这么写,新增的数组简写语法。

php 5.3版及以前的版本不接受这么写...

$data = [
'start_time' => '123',
'end_time' =>'456'
];

解释这些结构超出了本手册的范围,但对于每种结构至少会提供一个例子。要得到这些结构的更多信息,建议参考有关此广阔主题的其它著作。

语法

定义数组 array()

可以用 array() 语言结构来新建一个数组。它接受任意数量用逗号分隔的 键(key) => 值(value)对。

array(  key =>  value
     , ...
     )
// 键(key)可是是一个整数 integer 或字符串 string
// 值(value)可以是任意类型的值
最后一个数组单元之后的逗号可以省略。通常用于单行数组定义中,例如常用 array(1, 2) 而不是 array(1, 2, )。对多行数组定义通常保留最后一个逗号,这样要添加一个新单元时更方便。

自 5.4 起可以使用短数组定义语法,用 [] 替代 array()。

Example #1 一个简单数组

<?php
$array = array(
 "foo" => "bar",
 "bar" => "foo",
);

// 自 PHP 5.4 起
$array = [
 "foo" => "bar",
 "bar" => "foo",
];
?>

key 可以是 integer 或者 string。value 可以是任意类型。

此外 key 会有如下的强制转换:

包含有合法整型值的字符串会被转换为整型。例如键名 "8" 实际会被储存为 8。但是 "08" 则不会强制转换,因为其不是一个合法的十进制数值。
浮点数也会被转换为整型,意味着其小数部分会被舍去。例如键名 8.7 实际会被储存为 8。
布尔值也会被转换成整型。即键名 true 实际会被储存为 1 而键名 false 会被储存为 0。
Null 会被转换为空字符串,即键名 null 实际会被储存为 ""。
数组和对象不能被用为键名。坚持这么做会导致警告:Illegal offset type。
如果在数组定义中多个单元都使用了同一个键名,则只使用了最后一个,之前的都被覆盖了。

Example #2 类型强制与覆盖示例

<?php
$array = array(
 1 => "a",
 "1" => "b",
 1.5 => "c",
 true => "d",
);
var_dump($array);
?>

以上例程会输出:

array(1) {
  [1]=>
  string(1) "d"
}
上例中所有的键名都被强制转换为 1,则每一个新单元都会覆盖前一个的值,最后剩下的只有一个 "d"。

PHP 数组可以同时含有 integer 和 string 类型的键名,因为 PHP 实际并不区分索引数组和关联数组。

如果对给出的值没有指定键名,则取当前最大的整数索引值,而新的键名将是该值加一。如果指定的键名已经有了值,则该值会被覆盖。

Example #3 混合 integer 和 string 键名

<?php
$array = array(
 "foo" => "bar",
 "bar" => "foo",
 100 => -100,
 -100 => 100,
);
var_dump($array);
?>

以上例程会输出:

array(4) {
  ["foo"]=>
  string(3) "bar"
  ["bar"]=>
  string(3) "foo"
  [100]=>
  int(-100)
  [-100]=>
  int(100)
}
key 为可选项。如果未指定,PHP 将自动使用之前用过的最大 integer 键名加上 1 作为新的键名。

Example #4 没有键名的索引数组

<?php
$array = array("foo", "bar", "hallo", "world");
var_dump($array);
?>

以上例程会输出:

array(4) {
  [0]=>
  string(3) "foo"
  [1]=>
  string(3) "bar"
  [2]=>
  string(5) "hallo"
  [3]=>
  string(5) "world"
}
还可以只对某些单元指定键名而对其它的空置:

Example #5 仅对部分单元指定键名

<?php
$array = array(
   "a",
   "b",
 6 => "c",
   "d",
);
var_dump($array);
?>

以上例程会输出:

array(4) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [6]=>
  string(1) "c"
  [7]=>
  string(1) "d"
}
可以看到最后一个值 "d" 被自动赋予了键名 7。这是由于之前最大的整数键名是 6。

用方括号语法访问数组单元 ¶

数组单元可以通过 array[key] 语法来访问。

Example #6 访问数组单元

<?php
$array = array(
 "foo" => "bar",
 42 => 24,
 "multi" => array(
   "dimensional" => array(
    "array" => "foo"
   )
 )
);

var_dump($array["foo"]);
var_dump($array[42]);
var_dump($array["multi"]["dimensional"]["array"]);
?>

以上例程会输出:

string(3) "bar"
int(24)
string(3) "foo"
Note:
方括号和花括号可以互换使用来访问数组单元(例如 $array[42] 和 $array{42} 在上例中效果相同)。
自 PHP 5.4 起可以用数组间接引用函数或方法调用的结果。之前只能通过一个临时变量。

自 PHP 5.5 起可以用数组间接引用一个数组原型。

Example #7 数组间接引用

<?php
function getArray() {
 return array(1, 2, 3);
}

// on PHP 5.4
$secondElement = getArray()[1];

// previously
$tmp = getArray();
$secondElement = $tmp[1];

// or
list(, $secondElement) = getArray();
?>

Note:
试图访问一个未定义的数组键名与访问任何未定义变量一样:会导致 E_NOTICE 级别错误信息,其结果为 NULL。

更多内容可以参考这篇文章:http://www.php.net/manual/zh/language.types.array.php

PHP 相关文章推荐
PHP 中执行系统外部命令
Oct 09 PHP
PHP SQLite类
May 07 PHP
基于php缓存的详解
May 15 PHP
修改php.ini以达到屏蔽错误信息并记录日志
Jun 16 PHP
php5.3 注意事项说明
Jul 01 PHP
php获取服务器端mac和客户端mac的地址支持WIN/LINUX
May 15 PHP
destoon实现会员商铺中指定会员或会员组投放广告的方法
Aug 21 PHP
php5.4以下版本json不支持不转义内容中文的解决方法
Jan 13 PHP
php中Ioc(控制反转)和Di(依赖注入)
May 07 PHP
php实现的AES加密类定义与用法示例
Jan 29 PHP
PHP双向链表定义与用法示例
Jan 31 PHP
Laravel统一错误处理为JSON的方法介绍
Oct 18 PHP
对淘宝URL中ID提取的PHP代码
Sep 01 #PHP
怎么在Windows系统中搭建php环境
Aug 31 #PHP
深入解析php中的foreach函数
Aug 31 #PHP
如何使用php输出时间格式
Aug 31 #PHP
PHP取整函数:ceil,floor,round,intval的区别详细解析
Aug 31 #PHP
php取整函数ceil,floo,round的用法及介绍
Aug 31 #PHP
php strrpos()与strripos()函数
Aug 31 #PHP
You might like
Windows下XDebug 手工配置与使用说明
2010/07/11 PHP
PHP使用CURL获取302跳转后的地址实例
2014/05/04 PHP
php使用curl实现简单模拟提交表单功能
2017/05/15 PHP
PHP利用Socket获取网站的SSL证书与公钥
2017/06/18 PHP
Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
2017/10/11 PHP
php如何比较两个浮点数是否相等详解
2019/02/12 PHP
jQuery 改变CSS样式基础代码
2010/02/11 Javascript
Jquery 的outerHeight方法使用介绍
2013/09/11 Javascript
JS注释所产生的bug 即使注释也会执行
2013/11/19 Javascript
js时间比较示例分享(日期比较)
2014/03/05 Javascript
在浏览器中实现图片粘贴的jQuery插件-- pasteimg使用指南
2014/12/29 Javascript
探索angularjs+requirejs全面实现按需加载的套路
2016/02/26 Javascript
flexslider.js实现移动端轮播
2017/02/05 Javascript
原生JS进行前后端同构
2018/04/22 Javascript
解决angular双向绑定无效果,ng-model不能正常显示的问题
2018/10/02 Javascript
JavaScript强制类型转换和隐式类型转换操作示例
2019/05/01 Javascript
详解package.json版本号规则
2019/08/01 Javascript
[35:26]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第三局
2016/02/26 DOTA
用Python实现斐波那契(Fibonacci)函数
2016/03/25 Python
python中如何使用朴素贝叶斯算法
2017/04/06 Python
Python守护线程用法实例
2017/06/23 Python
python样条插值的实现代码
2018/12/17 Python
Python语法分析之字符串格式化
2019/06/13 Python
python tkinter窗口最大化的实现
2019/07/15 Python
Python利用FFT进行简单滤波的实现
2020/02/26 Python
python输入中文的实例方法
2020/09/14 Python
中国酒类在线零售网站:酒仙网
2016/08/20 全球购物
Sephora丝芙兰澳洲官方网站:国际知名化妆品购物
2016/10/27 全球购物
澳大利亚排名第一的狂热牛仔品牌:ONETEASPOON
2018/11/20 全球购物
英语专业大学生求职简历的自我评价
2013/10/18 职场文书
《明天,我们毕业》教学反思
2014/04/24 职场文书
关于读书的演讲稿800字
2014/08/27 职场文书
村党支部书记四风问题个人对照检查材料思想汇报
2014/10/06 职场文书
行政二审代理词
2015/05/25 职场文书
先进党支部事迹材料2016
2016/02/26 职场文书
Java常用工具类汇总 附示例代码
2021/06/26 Java/Android