PHP對數組的常用處理
print_r()
利用 print_r() 函數可以列印輸出整個數組内容及結構,按照一定格式顯示鍵和元素。注意 print_r() 函數不僅是隻用于列印,實際它是用于列印關于變量的易于了解的資訊。
var_dump()
同 print_r() 函數一樣,var_dump() 函數也可以用于列印數組的資料及結構。不過 var_dump() 函數功能比 print_r() 更強大,可以同時列印多個變量且給出變量的類型資訊。
<?php
$arr_age = array(18, 20, 25);
var_dump($arr_age);
?>
輸出
array(3) {
[0]=>
int(18)
[1]=>
int(20)
[2]=>
int(25)
}
print_r() 和 var_dump() 函數一般是用于調試程式使用,更多情況是使用 echo 來輸出具體的數組單元值。
is_array()
PHP is_array() 函數用于檢測變量是否是數組,這個函數尤其會用于一些安全性檢查方面(如表單或 SESSION 檢查等)。
foreach()
PHP foreach() 文法結構用于周遊操作或輸出數組,foreach() 僅能用于周遊數組或對象,當試圖将其用于其它資料類型或者一個未初始化的變量時會産生錯誤。
文法:
foreach (array as $value)
statement
// 或者:
foreach (array as $key => $value)
statement
上述文法中,每次循環将目前單元的值賦給 $value 并且數組内部的指針向前移一步。在第二種文法格式中還将目前單元的鍵名也會在每次循環中賦給變量 $key。
例子:
<?php
$arr_age = array("wang"=>18, "li"=>20, "zhang"=>25);
foreach ($arr_age as $age) {
echo $age,'<br />';
}
?>
運作該例子輸出:
18
20
25
延伸預讀
PHP 數組是通過哈希表(HashTable)表實作的,是以 foreach 周遊數組時是依據元素添加的先後順序來進行的。如果想按照索引大小周遊,應該使用 for() 循環周遊。
提示
也可以用 list() 和 each() 結合來周遊數組,但測試發現效率不如 foreach() 。
array_sum()
PHP array_sum() 函數用于計算數組中所有值的和,以整數或浮點數傳回計算結果,非數字的單元将視作 0 。
array_product()
PHP array_product() 函數用于計算數組中所有值的乘積,以整數或浮點數傳回計算結果,非數字的單元将視作 0 。
array_count_values()
PHP array_count_values() 函數用于統計數組中所有的值出現的次數,傳回一個數組,其元素的鍵名是原數組的值,鍵值是該值在原數組中出現的次數。
in_array()
PHP in_array() 函數檢查數組中是否存在某個值,如果存在則傳回 TRUE ,否則傳回 FALSE 。
文法:
bool in_array( mixed needle, array array [, bool strict] )
參數 | 說明 |
---|---|
needle | 需要在數組中搜尋的值,如果是字元串,則區分大小寫 |
array | 需要檢索的數組 |
strict | 可選,如果設定為 TRUE ,則還會對 needle 與 array 中的值類型進行檢查 |
例子:
<?php
$arr_a = array("a", "b", "c", 1);
if(in_array("a", $arr_a)){
echo '字元 a 在 $arr_a 數組中存在';
} else {
echo '字元 a 在 $arr_a 數組中不存在';
}
?>
例子輸出結果如下:
字元 a 在 $arr_a 數組中存在
嚴格檢查的例子:
<?php
$arr_a = array("a", "b", "c", 1);
if(in_array("1", $arr_a, TRUE)){
echo '字元 1 在 $arr_a 數組中存在';
} else {
echo '字元 1 在 $arr_a 數組中不存在';
}
?>
例子輸出結果如下:
字元 1 在 $arr_a 數組中不存在
數組作為 needle 的例子:
<?php
$arr_a = array(array("a", "b"), 1, 2);
$arr_b = array("a", "b");
if(in_array($arr_b, $arr_a)){
echo '數組 $arr_b 在 $arr_a 數組中存在';
} else {
echo '數組 $arr_b 在 $arr_a 數組中不存在';
}
?>
例子輸出結果如下:
數組 $arr_b 在 $arr_a 數組中存在
array_key_exists()
PHP array_key_exists() 函數用于檢查給定的鍵名或索引是否存在于數組中,如果存在則傳回 TRUE ,否則傳回 FALSE 。
提示
array_key_exists() 函數對于值為 null 的數組元素仍傳回 TRUE。若要對數組元素是否為 null 做檢查,請使用 isset()。
array_array()
PHP array_search() 函數用于在數組中搜尋給定的值,如果成功則傳回相應的鍵名,否則傳回 FALSE 。
文法:
mixed array_search( mixed needle, array array [, bool strict] )
參數 | 說明 |
---|---|
needle | 需要在數組中搜尋的值,如果是字元串,則區分大小寫 |
array | 需要檢索的數組 |
strict | 可選,如果設定為 TRUE ,則還會對 needle 與 array 中的值類型進行檢查 |
提示
由于索引數組的起始索引數字可能是 0 ,是以該函數也可能傳回與 FALSE 等值的非布爾值,例如 0 或者 "",是以需要使用 === 運算符對函數傳回的值進行嚴格校驗。
例子:
<?php
$arr_a = array(0 => "a", 1 => "b", 2 => "c");
$key = array_search("a", $arr_a);
if( $key !== FALSE ){
echo "鍵名為:$key";
} else {
echo '無比對結果';
}
?>
例子輸出結果如下:
鍵名為:0
如果 needle 在 array 中出現不止一次,則傳回第一個比對的鍵。要傳回所有比對值的鍵,請使用 array_keys() 函數。
參考閱讀
in_array() :檢查數組中是否存在某個值
- sort() 函數用于對數組單元從低到高進行排序。
- rsort() 函數用于對數組單元從高到低進行排序。
- asort() 函數用于對數組單元從低到高進行排序并保持索引關系。
- arsort() 函數用于對數組單元從高到低進行排序并保持索引關系。
- ksort() 函數用于對數組單元按照鍵名從低到高進行排序。
- krsort() 函數用于對數組單元按照鍵名從高到低進行排序。
- natsort() 函數用于對數組使用 自然算法 進行排序。
- natcasesort() 函數用于對數組使用 自然算法 并不區分大小寫進行排序。
PHP sort() 函數用于對數組單元從低到高進行排序,如果成功則傳回 TRUE,失敗則傳回 FALSE。
注意:本函數會為排序的數組中的單元賦予新的鍵名,這将删除原有的鍵名而不僅是重新排序。
文法:
bool sort( array &array [, int sort_flags] )
可選參數 sort_flags 用于改變排序的行為:
sort_flags 取值 | 說明 |
---|---|
SORT_REGULAR | 正常比較單元 |
SORT_NUMERIC | 單元被作為數字來比較 |
SORT_STRING | 單元被作為字元串來比較 |
SORT_LOCALE_STRING | 根據目前的區域(locale)設定來把單元當作字元串比較 |
例子:
<?php
$arr = array("b", "a", "c");
sort($arr);
print_r($arr);
?>
運作該例子輸出:
Array ( [0] => a [1] => b [2] => c )
在本例中, $arr 數組單元被按照字母順序排序,而數組單元經過排序後,鍵值重新配置設定。
natsort()
PHP natsort() 函數用于對數組使用 自然算法 進行排序,如果成功則傳回 TRUE,失敗則傳回 FALSE。
本函數實作了一個和人們通常對字母數字字元串進行排序的方法一樣的排序算法并保持原有鍵名和值的關聯。
文法:
bool natsort ( array &array )
natsort() 和 sort() 排序比較:
<?php
$arr1 = $arr2 = array("a1", "a11", "a2");
sort($arr1);
print_r($arr1);
echo '<br />';
natsort($arr2);
print_r($arr2);
?>
運作該例子輸出:
Array ( [0] => a1 [1] => a11 [2] => a2 )
Array ( [0] => a1 [2] => a2 [1] => a11 )
natcasesort()
natcasesort() 函數行為與 natsort() 函數完全一緻,差別之處在于 natcasesort() 不對數組單元區分大小寫。
array_multisort()
PHP array_multisort() 函數用于一次對多個數組進行排序,或者根據某一維或多元對多元數組進行排序,如果成功則傳回 TRUE,失敗則傳回 FALSE。
注意:關聯(string)鍵名保持不變,但數字鍵名會被重新索引。
文法:
bool array_multisort( array1 [, sort_order][, sort_flags][, array2] ... )
array1 為必須參數,需要排序的數組。可選參數 sort_order 和 sort_flags 意義如下:
sort_order 取值 | 說明 |
---|---|
SORT_ASC | 預設值,按照上升順序排序 |
SORT_DESC | 按照下降順序排序 |
sort_flags 取值 | 說明 |
---|---|
SORT_REGULAR | 預設值,按照通常方法比較 |
SORT_NUMERIC | 單元被作為數字來比較 |
SORT_STRING | 單元被作為字元串來比較 |
每個數組之後不能指定兩個同類的排序标志,且每個數組後指定的排序标志僅對該數組有效,如果缺少對應标志将采用預設值。
輸入數組被當成一個表的列并以行來排序,這類似于 SQL 的 ORDER BY 子句功能。第一個數組是要排序的主要數組,單元的值相同的話就按照下一個輸入數組中相應值的大小來排序,依此類推。
例子1:
<?php
$arr1 = array(1, 3, 2, 4);
$arr2 = array("a", "b", "c", "d");
array_multisort($arr1, $arr2);
print_r($arr1);
print_r($arr2);
?>
運作該例子輸出:
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )
Array ( [0] => a [1] => c [2] => b [3] => d )
可見第一個主要數組經過排序後,後面的數組會受到第一個數組的影響而保持對應關系。就上面的例子,哪怕給 arr2 加上 SORT_DESC (降序排列)參數,也不會影響到 arr2 的排序結果。這種影響在多元數組裡也存在。
例子2,主數組單元值有同樣的情況:
<?php
$arr1 = array(1, 2, 2, 4);
$arr2 = array("a", "b", "c", "d");
array_multisort($arr1, SORT_DESC, $arr2, SORT_ASC);
print_r($arr1);
print_r($arr2);
?>
運作該例子輸出:
Array ( [0] => 4 [1] => 2 [2] => 2 [3] => 1 )
Array ( [0] => d [1] => b [2] => c [3] => a )
例子3,多元數組排序:
<?php
$arr = array (array (1, 2, 3, 4), array ("a", "b", "b", "d"));
array_multisort($arr[0], SORT_DESC, $arr[1], SORT_ASC);
print_r($arr);
?>
運作該例子輸出:
Array
(
[0] => Array
(
[0] => 4
[1] => 2
[2] => 2
[3] => 1
)
[1] => Array
(
[0] => d
[1] => b
[2] => c
[3] => a
)
)
例子4,數字與字元混合:
<?php
$arr = array (array ("11", 2, 2, "a"), array (1, 2, 3, 4));
array_multisort($arr[0], SORT_ASC, SORT_STRING, $arr[1], SORT_NUMERIC, SORT_DESC);
var_dump($arr);
?>
運作該例子輸出:
array(2) {
[0]=>
array(4) {
[0] => string(2) "11"
[1] => int(2)
[2] => int(2)
[3] => string(1) "a"
}
[1]=>
array(4) {
[0] => int(1)
[1] => int(3)
[2] => int(2)
[3] => int(4)
}
}
shuffle()
PHP shuffle() 函數随機排列數組單元的順序(将數組打亂)。本函數為數組中的單元賦予新的鍵名,這将删除原有的鍵名而不僅是重新排序。
文法:
bool shuffle ( array &array )
例子1:
<?php
$arr = range(1,8);
print_r($arr);
echo '<br />';
shuffle($arr);
print_r($arr);
?>
運作該例子輸出:
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 )
Array ( [0] => 6 [1] => 1 [2] => 3 [3] => 2 [4] => 5 [5] => 7 [6] => 8 [7] => 4 )
需要說明的是,每次重新整理頁面,shuffle($arr) 後的 print_r($arr) 結果都是不一樣的。而自 PHP 4.2.0 起,也不再需要用 srand() 等函數給随機數發生器播種而由系統自動完成。
例子2,使用關聯數組:
<?php
$arr = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
shuffle($arr);
print_r($arr);
?>
運作該例子輸出:
Array ( [0] => 5 [1] => 2 [2] => 1 [3] => 3 [4] => 4 )
當然,每次重新整理頁面輸出的結果都是不一樣的。