-
創建數組
索引數組
索引為整數,如果沒有指定索引值則默認為零,依次遞增。
//索引數組
$array1 = array('a', 'b', 'c', 'd');
關聯數組
數組的key為字符串。
//關聯數組
$arr2 = array(
"a" => 1,
"b" => 2,
"c" => 3,
"d" => 4,
);
多維數組
//二維數組
$cars = array
(
array("Volvo", 22, 18),
array("BMW", 15, 13),
array("Saab", 5, 2),
array("Land Rover", 17, 15),
);
復合數組
//二維復合數組
$ret = array(
'id' => 2,
'name' => '算法',
'children' => array(
array('id' => 5, 'name' => 'QUERY處理'),
array('id' => 6, 'name' => 'URL處理'),
array('id' => 7, 'name' => '內容處理'),
array('id' => 8, 'name' => '統計計算'),
),
);
range函數創建索引數組
該函數創建一個數組,包含從low到high(包含low和high)之間的整數或字符。如果high比low小,則返回反序的數組。
range(low,high,step)
$array = range(0,5);//0,1,2,3,4,5
$array = range(0,50,10);//0,10,20,30,40,50
$array = range("a","d");//a,b,c,d
-
遍歷數組
for循環遍歷索引數組
$arr = array(1, 2, 3, 4);
for ($i = 0; $i < count($arr); $i++) {
echo $arr[$i];//1234
};
foreach循環遍歷數組
$arr = array(
"a" => 1,
"b" => 2,
"c" => 3,
"d" => 4,
);
foreach ($arr as $key => $value) {
var_dump($key . '=>' . $value);//a=>1b=>2c=>3d=>4
}
each函數遍歷數組
each() 函數返回當前元素的鍵名和鍵值,并將內部指針向前移動,該元素的鍵名和鍵值會被返回帶有四個元素的數組中。兩個元素(1 和 Value)包含鍵值,兩個元素(0 和 Key)包含鍵名。如果內部指針越過了數組范圍,函數將返回 FALSE。
$sports = array('ball' => 'good', 'swim' => 'well', 'run' => 'bad');
while ($elem = each($sports)) {
echo $elem[0] . ': ' . $elem[1];//ball: goodswim:wellrun: bad
echo $elem['key'] . ': ' . $elem['value'];//ball: goodswim:wellrun: bad
}
list()搭配each遍歷數組
像 array() 一樣,list不是真正的函數,而是語言結構。list()用一步操作給一組變量進行賦值。
$sports = array('ball' => 'good', 'swim' => 'well', 'run' => 'bad');
for (; list($key, $value) = each($sports);) {
echo $key . ': ' . $value;//ball: goodswim:wellrun: bad
}
-
數組添加元素
賦值添加
直接對數組變量賦值$arr[key] = value。
$arr['a'] = 1;
var_dump($arr);//'a'=>1
中括號[]形式添加
如果方括號中沒有指定索引值,則取當前最大整數索引值,新的鍵名將是該值加1。如果當前還沒有整數索引,則鍵名將為0。
$arr = array('a', 'b', 'c');
$arr[] = 'd';
var_dump($arr);//'a','b','c','d'
使用array_push()函數
array_push() 函數向第一個參數的數組尾部添加一個或多個元素(入棧),然后返回新數組的長度。該函數等于多次調用 $array[] = $value。
注釋:即使數組中有字符串鍵名,您添加的元素也始終是數字鍵。
注釋:如果用 array_push() 來給數組增加一個單元,還不如用 $array[] =,因為這樣沒有調用函數的額外負擔。
注釋:如果第一個參數不是數組,array_push() 將發出一條警告。這和 $var[] 的行為不同,后者會新建一個數組。
$arr = array("red", "green");
array_push($a, "blue", "yellow");
print_r($arr);//Array ( [0] => red [1] => green [2] => blue [3] => yellow )
使用array_unshift()函數在數組開頭添加元素
array_unshift() 函數用于向數組插入新元素。新數組的值將被插入到數組的開頭。被加上的元素作為一個整體添加,這些元素在數組中的順序和在參數中的順序一樣。該函數會返回數組中元素的個數。
$a = array("a" => "red", "b" => "green");
array_unshift($a, "blue");
print_r($a);//Array ( [0] => blue [a] => red [b] => green )
-
數組刪除元素
使用unset()函數
銷毀指定的變量。
該函數允許取消一個數組中的鍵名,要注意數組將不會重建索引,如需重新索引,可以使用array_values()函數。
$arr = array('a', 'b', 'c');
unset($arr[1]);
var_dump($arr);//0=>'a',2=>'c'
使用array_splice()函數
array_splice() 函數從數組中移除選定的元素,并用新元素取代它。該函數也將返回包含被移除元素的數組。
array array_splice ( array &$input , int $offset [, int $length [, array $ replacement ]] )
array_splice() 把 input 數組中由 offset 和 length 指定的單元去掉,如果提供了 replacement 參數,則用 replacement 數組中的單元取代。返回一個包含有被移除單元的數組。注意 input 中的數字鍵名不被保留。如果 offset 為正,則從 input 數組中該值指定的偏移量開始移除。如果 offset 為負,則從 input 末尾倒數該值指定的偏移量開始移除。
$input = array("red", "green", "blue", "yellow");
array_splice($input, 2);
//$input is now array("red", "green")
如果省略 length,則移除數組中從 offset 到結尾的所有部分。如果指定了 length 并且為正值,則移除這么多單元。如果指定了 length 并且為負值,則移除從 offset 到數組末尾倒數 length 為止中間所有的單元。小竅門:當給出了 replacement 時要移除從 offset 到數組末尾所有單元時,用 count($input) 作為 length。
$input = array("red", "green", "blue", "yellow");
array_splice($input, 1, count($input), "orange");
//$input is now array("red", "orange")
$input = array("red", "green", "blue", "yellow");
array_splice($input, -1, 1, array("black", "maroon"));
//$input is now array("red", "green", "blue", "black", "maroon")
如果給出了 replacement 數組,則被移除的單元被此數組中的單元替代。如果 offset 和 length 的組合結果是不會移除任何值,則 replacement 數組中的單元將被插入到 offset 指定的位置。
$input = array("red", "green", "blue", "yellow");
array_splice($input, 3, 0, "purple");
//$input is now array("red", "green", "blue", "purple", "yellow");
array_pop()刪除數組最后一個元素
返回數組的最后一個值。如果數組是空的,或者非數組,將返回 NULL。
$a=array("red","green","blue");
array_pop($a);
print_r($a);//Array ( [0] => red [1] => green )
array_shift()刪除數組第一個元素
array_shift() 函數刪除數組中第一個元素,并返回被刪除元素的值。
$a=array("a"=>"red","b"=>"green","c"=>"blue");
array_shift($a);
print_r ($a);//Array ( [b] => green [c] => blue )
如果鍵名是數字的,所有元素都會獲得新的鍵名,從 0 開始,并以 1 遞增。
$a=array(0=>"red",1=>"green",2=>"blue");
array_shift($a);
print_r ($a);//Array ( [0] => green [1] => blue )
-
數組修改元素
利用key值修改
$arr=('a'=>1,'b'=>2,'c'=>3);
$arr['b']=4;
print_r($arr);//'a'=>1,'b'=>4,'c'=>3
-
數組排序
sort()函數對數組進行升序排序
按照字母升序對數組中的元素進行排序
$cars=array("Volvo","BMW","SAAB");
sort($cars);//'BMW','SAAB','Volvo'
按照字母降序對數組中的元素進行排序
$numbers=array(3,5,1,22,11);
sort($numbers);//1,3,5,11,22
rsort()函數對數組進行降序排序
$numbers=array(3,5,1,22,11);
rsort($numbers);//22,11,5,3,1
asort()函數根據值對數組排序
$age=array("Steve"=>"37","Bill"=>"35","Peter"=>"43");
asort($age);//'Bill'=>35,'Steve'=>37,'Peter'=>43
ksort()函數利用鍵對數組排序
$age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43");
ksort($age);//'Bill'=>35,'Peter'=>43,'Steve'=>37
arsort()函數對值進行逆序排序
$age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43");
arsort($age);//'Peter'=>43,'Steve'=>37,'Bill'=>35
krsort()函數對鍵進行逆序排序
$age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43");
krsort($age);//'Steve'=>37,'Peter'=>43,'Bill'=>35
array_multisort()函數進行多維數組排序
array_multisort()可以用來一次對多個數組進行排序,或者根據某一維或多維對多維數組進行排序。參數中的數組被當成一個表的列并以行來進行排序,這類似 SQL 的 ORDER BY 子句的功能。第一個數組是要排序的主要數組。數組中的行(值)比較為相同的話,就會按照下一個輸入數組中相應值的大小進行排序,依此類推。
array_multisort(array1,sorting order,sorting type,array2,array3...)
bool array_multisort ( array &$arr [, mixed $arg = SORT_ASC [, mixed $arg = SORT_REGULAR [, mixed $... ]]] )
//排序順序標志:SORT_ASC、SORT_DESC
//排序類型標志:SORT_REGULAR、SORT_NUMERIC、SORT_STRING
//Eample1:最簡單的情況,數組中的列是對應的著的。
$arr1 = array(1,3,2);
$arr2 = array(5,4,6);
array_multisort($arr1,$arr2);
print_r($arr1); // 1,2,3
print_r($arr2); // 5,6,4
//Example2:對數據庫結果進行排序,把 volume降序排列,把 edition升序排列。
$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);
//現在有了包含有行的數組,但是 array_multisort() 需要一個包含列的數組,因此用以下代碼來取得列,然后排序。
foreach ($data as $key => $row) {
$volume[$key] = $row['volume'];
$edition[$key] = $row['edition'];
}
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);//array(6) { [0]=> array(2) { ["volume"]=> int(98) ["edition"]=> int(2) } [1]=> array(2) { ["volume"]=> int(86) ["edition"]=> int(1) } [2]=> array(2) { ["volume"]=> int(86) ["edition"]=> int(6) } [3]=> array(2) { ["volume"]=> int(85) ["edition"]=> int(6) } [4]=> array(2) { ["volume"]=> int(67) ["edition"]=> int(2) } [5]=> array(2) { ["volume"]=> int(67) ["edition"]=> int(7) } }
//array_multisort()函數功能很強,讀者自己參照例子和官方文檔需要細細體會
-
數組其他常見的操作
array_keys()函數獲取數組key合集
array_keys() 函數返回包含數組中所有鍵名的一個新數組。
$arr = array('a' => 1, 'b' => 2, 'c' => 3);
$keys = array_keys($arr);
var_dump($keys);//'a','b','c'
array_values()獲取數組值合集
array_values() 函數返回一個包含給定數組中所有鍵值的數組,但不保留鍵名。
$a=array("Name"=>"Bill","Age"=>"60","Country"=>"USA");
print_r(array_values($a));//Array ( [0] => Bill [1] => 60 [2] => USA )
array_unique()函數刪除重復元素
array_unique() 函數移除數組中的重復的值,并返回結果數組。當幾個數組元素的值相等時,只保留第一個元素,其他的元素被刪除。返回的數組中鍵名不變。
$a=array("a"=>"red","b"=>"green","c"=>"red");
print_r(array_unique($a));//Array ( [a] => red [b] => green )
$a=array(1,2,3,3,4,2);
print_r(array_unique($a));//Array ( [0] => 1 [1] => 2 [2] => 3 [4] => 4 )
array_merge()合并數組
array_merge() 將一個或多個數組的單元合并起來,一個數組中的值附加在前一個數組的后面。返回作為結果的數組。如果輸入的數組中有相同的字符串鍵名,則該鍵名后面的值將覆蓋前一個值。然而,如果數組包含數字鍵名,后面的值將不會覆蓋原來的值,而是附加到后面。如果只給了一個數組并且該數組是數字索引的,則鍵名會以連續方式重新索引。
$a1=array("red","green");
$a2=array("blue","yellow");
print_r(array_merge($a1,$a2));//Array ( [0] => red [1] => green [2] => blue [3] => yellow )
$a=array(3=>"red",4=>"green");
print_r(array_merge($a));//Array ( [0] => red [1] => green )
array_slice()截取數組片段
start,開始位置。0=第一個元素。
preserve,可選。規定函數保留鍵名還是重置鍵名。true、false
array_slice(array,start,length,preserve)
$a=array("red","green","blue","yellow","brown");
print_r(array_slice($a,1,2));//Array ( [0] => green [1] => blue )