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 相关文章推荐
Apache, PHP在Windows 9x/NT下的安装与配置 (一)
Oct 09 PHP
解析PHP中常见的mongodb查询操作
Jun 20 PHP
ThinkPHP3.1数据CURD操作快速入门
Jun 19 PHP
FastCGI 进程意外退出造成500错误
Jul 26 PHP
php resizeimage 部分jpg文件 生成缩略图失败的原因分析及解决办法
Mar 23 PHP
thinkphp3.2中实现phpexcel导出带生成图片示例
Feb 14 PHP
Zend Framework基于Command命令行建立ZF项目的方法
Feb 18 PHP
thinkphp分页集成实例
Jul 24 PHP
PHP性能分析工具xhprof的安装使用与注意事项
Dec 19 PHP
laravel使用Faker数据填充的实现方法
Apr 12 PHP
PHP实现字母数字混合验证码功能
Jul 11 PHP
PHP容器类的两种实现方式示例
Jul 24 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
PHP+.htaccess实现全站静态HTML文件GZIP压缩传输(一)
2007/02/15 PHP
php使HTML标签自动补全闭合函数代码
2012/10/04 PHP
微信 开发生成带参数的二维码的实例
2016/11/23 PHP
浅谈PHP错误类型及屏蔽方法
2017/05/27 PHP
PHP扩展Swoole实现实时异步任务队列示例
2019/04/13 PHP
Laravel服务容器绑定的几种方法总结
2020/06/14 PHP
jQuery 标题的自动翻转实现代码
2009/10/14 Javascript
基于jquery的表格排序
2010/09/11 Javascript
Jquery右下角抖动、浮动 实例代码(兼容ie6、FF)
2013/08/15 Javascript
返回页面顶部top按钮通过锚点实现(自写)
2013/08/30 Javascript
js实现背景图片感应鼠标变化的方法
2015/02/28 Javascript
JS实现上下左右对称的九九乘法表
2016/02/22 Javascript
详解jQuery停止动画——stop()方法的使用
2016/12/14 Javascript
d3.js入门教程之数据绑定详解
2017/04/28 Javascript
JS实现unicode和UTF-8之间的互相转换互转
2017/07/05 Javascript
js断点调试经验分享
2017/12/08 Javascript
使用async-validator编写Form组件的方法
2018/01/10 Javascript
微信小程序上传图片实例
2018/05/28 Javascript
原生JS实现简单的倒计时功能示例
2018/08/30 Javascript
从源码里了解vue中的nextTick的使用
2018/11/22 Javascript
从零开始实现Vue简单的Toast插件
2018/12/03 Javascript
分享JS表单验证源码(带错误提示及密码等级)
2020/01/05 Javascript
微信公众号网页分享功能开发的示例代码
2020/05/27 Javascript
[01:50]《我与DAC》之玩家:iG夺冠时的那面红旗
2018/03/29 DOTA
用pickle存储Python的原生对象方法
2017/04/28 Python
对python添加模块路径的三种方法总结
2018/10/16 Python
python numpy实现文件存取的示例代码
2019/05/26 Python
Python搭建代理IP池实现接口设置与整体调度
2019/10/27 Python
详解python命令提示符窗口下如何运行python脚本
2020/09/11 Python
Jeep牧马人、切诺基和自由人零配件:4 Wheel Drive Hardware
2017/07/02 全球购物
JPA面试常见问题
2016/11/14 面试题
高中的职业生涯规划书
2013/12/28 职场文书
直接有效的自我评价
2014/01/11 职场文书
2014全国两会大学生学习心得体会
2014/03/10 职场文书
2014年小班保育员工作总结
2014/12/23 职场文书
反腐倡廉影片观后感
2015/06/08 职场文书