四、 数组
1。索引数组和关联数组: (1)在PHP中有两种数组:数字索引数组和关联数组,php内部将所有的数组
都存储为关联数组。
(2)PHP数组元素有一个不依赖于键和值的内部顺序,这个顺序一般就是把值插
入到数组中的顺序.
2。访问数组元素$array[index]:
http://hi.baidu.com/kkwtre/blog/item/81fff1992ea7a30c6f068ce3.html
(1) index可以是数字或是字符串,如果完全是整数的字符串被当作整数处理,比如:$array["1"] 等价于 $array[1].但$array["001"]不等价于$array[1];
(2) 不需要将每个索引字符串都加上引号,$array[index]与$array['index']是一样的,但是建议加上引号,这是良好的编写习惯
(3) 键可以是一个变量,如果键是一个包括字符和变量的混合字符串,则需要加双引号
(4) 如果在字符串中要通过变量替换得到某个数组元素,则键名不使用引号,或将整个数组元素变量外加一个大括号
3。初试化数组: (1)可以如下初始化一个数组
$array[0] = 1;
$array['hello'] = 2;
.........
(2)也可以用array()语言结构
$array = array( "hello" => 2,0 => 1);
4.在数组末尾添加一个值: $array[] = 'hello',就会在数组array末尾添加一个数组元素:'hello',注意该数
组元素的键值是数字。
5.连续整数或字符的数组: $numbers = range(1,10) // array(1,2,3,4....10)
$letters = range('a','z') // array('a','b'......'z')
6.获得数组大小: count(),sizeof()两者是一样的
7.填充数组: array_pad(original_array,pad_size,pad_value)
(1)第二个参数是你想要数组拥有的最少的元素个数。第三个是要填充值,该函数返回
一个填充得到的新数组。
(2)该函数默认是填充到数组末尾的,但是可以将pad_size设置为负的,将填充到数组
开头。
8。多维数组: 数组中的值也可以是数组,这就构成了多维数组,可以用$array[index1][index2]
[index3]。。。多重下标访问多维数组元素
9。用list析取多个值:
http://hi.baidu.com/kkwtre/blog/item/c47467dd405d92dd8c102916.html
$e = array(0=>'100', 1=>'200', 2=>'300', 'b'=>'400');
list($a,$b,$c,$d) = $e;
//$a='100', $b='200',$c='200'.$d = NULL,因为list仅能用于析取数字索引的数组元素
注意三点:
(1).list仅能用于析取数字索引的数组元素
(2).list假定数字索引从0开始
(3).list中可以用逗号跳过多个值
10.子索引数组的截取: array_slice(array,offset,length),
一般只用于数字索引数组,用于关联数组没有意义
11.数组分块成多个小数组:
$chunks = array_chunk(array, size [, bool preserve_keys])
preserve_keys默认值是 FALSE。
12.获得数组中键/值组成的数组: array_keys(array), array_values(array);
13.是否存在键: array_key_exists(key,array) 返回 true | false
14.是否存在值: in_array(to_find,array [,bool strict])
(1)返回 true | false. 默认只检查值不检查类型,如果strict为true则类型也会被检查
(2)array_search(to_find,array [,bool strict])是in_array变种,唯一区别是在数组中搜索给
定的值,如果成功则返回相应的键名
15.数组的插入删除: array_splice(array,offset [, length [, array replacement]])
(1) 该函数把array数组中由 offset 和 length 指定的单元去掉,如果提供了 replacement 参数,则用 replacement 数组中的单元取代。返回一个包含有被移除单元的数组。
(2) 该函数操作以后 array会发生变化,(也就是参数是以引用的方式传进去的)。
(3) 该函数主要用于对数字索引数组的处理,对关联数组会将replacement的键值去除,例如:
<?php
function print_array($array){
foreach($array as $key=>$value){
echo "$key => $value; ";
}
echo "\n";
}
$replacement = array('x' => 'xx','y'=> 'yy');
$input = array ("a" => 'aa', "b" => 'bb', 'c' => "cc", 'd' => "dd", 'e' => 'ee', 'f'=>'ff','g'=>'gg');
print_array(array_splice ($input, 2,2,$replacement)); //c => cc; d => dd;
print_array($input); //a => aa; b => bb; 0 => xx; 1 => yy; e => ee; f => ff; g => gg;
?>
16.数组和变量间转换:
extract( array ),和 compact(variable_string1,variable_string2,variable_string3......)
(1) 变量的名字对应数组的键名,而变量的值则成为数组中的键值。
(2) extract(array,extract_type,prefix),它检查每个键名看是否可以作为一个合法的变量名,同时也检查和符号表中已有的变量名的 名字是否冲突。对待非法/数字和冲突的键名的方法将根据 extract_type 参数(即第二个参数)决定。最常用的extract_type是EXTR_PREFIX_ALL给所有变量名加上前缀 prefix。
<?php
$var_array = array ("color" => "blue",
"size" => "medium",
"shape" => "sphere");
extract ($var_array, EXTR_PREFIX_ALL, "haha");
print "$haha_color, $haha_size, $haha_shape\n"; //blue, medium, sphere
//注意传入的是变量的名字,而不是带有'$'前缀的变量本身
$array = compact('haha_color', 'haha_size', 'haha_shape');
var_dump($array); // haha_color => blue, haha_size => medium, haha_shape => sphere
?>
17.遍历数组:http://hi.baidu.com/kkwtre/blog/item/0a0bbe0308f44ee809fa9338.html <php程序设计>P128
(1) PHP数组元素有一个不依赖于键和值的内部顺序,这个顺序一般就是把值插入到数组中的顺序。
(2) foreach()结构和each()等迭代器函数是按照这个内部顺序进行遍历的,而for循环由于只作用于数字索引的数组,是按照数字索引进行遍历的,与内部顺序没有关系。
18.为数组的每个元素调用函数:
array_walk(array,function_name [,function_parameter])
(1) 典型情况下callback function 接受两个参数。array 参数的值作为第一个,键名作为第二个。如果提供了可选参数 function_parameter,将被作为第三个参数传递给 callback function。
(2) 用户不应在回调函数中增加/删除单元,unset 单元等改变该数组本身。如果 array_walk() 作用的数组改变了,则此函数的行为未 经定义,且不可预期。
<?php
$fruits = array ("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
function test_alter (&$item1, $key, $prefix) {
$item1 = "$prefix:". "$item1";
}
array_walk ($fruits, 'test_alter', 'fruit'); //d: fruit:lemon; a: fruit:orange; b: fruit:banana; c: fruit:apple;
?>