2.4PHP复合数据类型:数组和对象
下一篇: 2.5PHP特殊数据类型:资源类型和空值类型
PHP中复合数据类型包括两种,即数组和对象。
array(数组):一组数据的集合。
object(对象):对象是类型的实例,使用new命令来创建。
数组(array)
数组是一组数据的集合,它把一系列数据组织起来,形成一个可操作的整体。数组中可以包括很多数据类型,如字符串,整型,对象,数组,资源等。
PHP中的数组实际上是一个有序映射,映射是一种把values关联到keys的类型。数组中的每个数据称为一个元素,元素包括索引(键名)和值两个部分。数组中的值还可以再是数组,这样就形成了多维数组。
定义数组的语法格式如下:
$array = ('value1','value2'......) 或 $array[key] = 'value' 或 $array = array(key1=>value1,key2=>value2......)
元素的索引(key)可以由数字或字符串组成,元素的值(value)可以是任意类型的值。
其中,参数key是数组元素的下标,value是数组下标所对应的元素。所以,数组其实用逗号分隔的键(key) => 值(value)对。
最后一个数组单元之后的逗号可以省略,例如常用array(1,2)而不是array(1,2,)。对多行数组定义通常保留最后一个逗号,这样要添加一个新单元时更方便。
自 5.4 起可以使用短数组定义语法,用 [] 替代 array()。
例子1: <?php $array = array( "foo" => "bar" , "bar" => "foo" , ); // 自 PHP 5.4 起 $array = [ "foo" => "bar" , "bar" => "foo" , ]; ?>
此外 key 会有如下的强制转换:
1. 包含有合法整型值的字符串会被转换为整型。例如键名 "8" 实际会被储存为 8。但是 "08" 则不会强制转换,因为其不是一个合法的十进制数值。
2. 浮点数也会被转换为整型,意味着其小数部分会被舍去。例如键名 8.7 实际会被储存为 8。
3. 布尔值也会被转换成整型。即键名 true 实际会被储存为 1 而键名 false 会被储存为 0。
4. Null 会被转换为空字符串,即键名 null 实际会被储存为 ""。
5. 数组和对象不能被用为键名。坚持这么做会导致警告:Illegal offset type。
如果在数组定义中多个单元都使用了同一个键名,则只使用了最后一个,之前的都被覆盖了。
例子2: <?php $array = array( 1 => "a" , "1" => "b" , 1.5 => "c" ,//1.5被替换为1 true => "d" ,//true被替换为1 ); var_dump ( $array ); ?> 以上输出: array(1) { [1]=>string(1) "d" }
在数组中,如果想取得数组中某一个数的值,可以用数组名加下标(索引)的方法取得特定值。
如果对给出的值没有指定键名,则取当前最大的整数索引值,而新的键名将是该值加一。如果指定的键名已经有了值,则该值会被覆盖。
例子3: <?php $array = array( 1 => 3, 'a' => b, 1 => 4, 2 => 5, 5); //如果想取得5,只要用$array[2] echo $array[2]."<br/>"; //修改$array[2]的值 将其值改为7 $array[2] = 7; /*因为上面定义了两个相同的索引1,不过后面 的后定义值会覆盖前面的值,可以打印看下 */ //print_r是php自定义函数,用于打印数组 print_r($array); ?>
上面的执行结果是先输出5,然后打印出数组:
5 Array ( [1] => 4 [a] => b [2] => 7 [3] => 5 ) 上面值为5没定义键值,php会默认取之前最大的整数索引值的下一个整数(即原有的索引值加1)为其键值。php默认最小的整数索引值为0。
要修改某个值,通过其键名给该单元赋一个新值。要删除某键值对,对其调用 unset() 函数。
例子4: <?php $arr = array( 5 => 1 , 12 => 2 ); //将索引为5的值1改为42 $arr [ 5 ] = 42 ; //删除数组中索引5和其对应的值 unset( $arr [ 5 ]); //删除整个数组 unset( $arr ); ?>
对象(object)
php中应用到的编程方法有两种:面向过程和面向对象。面向对象是模拟现实世界来进行编程的一种方法。
要创建一个新的对象 object ,使用 new 语句实例化一个类:
<?php class foo { function do_foo () { echo "Doing foo." ; } } $bar = new foo ; $bar -> do_foo (); ?>
这部分放在后面讲解。
下一篇: 2.5PHP特殊数据类型:资源类型和空值类型