四、 數組
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;
?>