--------------------------------------------------------------------------------
陣列處理函式庫
--------------------------------------------------------------------------------
本函式庫共有 23 個函式
array: 建立一個新的陣列。
array_walk: 讓使用者自訂函數能處理陣列中的每一個元素。
arsort: 將陣列的值由大到小排序。
asort: 將陣列的值由小到大排序。
count: 計算變數或陣列中的元素個數。
current: 傳回陣列中目前的元素。
each: 傳回陣列中下一個元素的索引及值。
end: 將陣列的內部指標指到最的元素。
key: 取得陣列中的索引資料。
ksort: 將陣列的元素依索引排序。
list: 列出陣列中元素的值。
next: 將陣列的內部指標向移動。
pos: 傳回陣列目前的元素。
prev: 將陣列的內部指標往前移動。
range: 建立一個整數范圍的陣列。
reset: 將陣列的指標指到陣列第一個元素。
rsort: 將陣列的值由大到小排序。
shuffle: 將陣列的順序弄混。
sizeof: 獲知陣列的大小。
sort: 將陣列排序。
uasort: 將陣列依使用者自定的函式排序。
uksort: 將陣列的索引依使用者自定的函式排序。
usort: 將陣列的值依使用者自定的函式排序。
--------------------------------------------------------------------------------
函式:array()
--------------------------------------------------------------------------------
陣列處理函式庫
array
建立一個新的陣列。
語法: array array(...);
傳回值: 陣列
函式種類: 資料處理
內容說明
傳回的參數是陣列形態。參數可以是帶有 => 運算子的索引。array() 其實不是一個正規的函式,它主要是要用來表示陣列。
使用范例
下面范例用顯示如何建立一個二維陣列,如何指定聯合陣列的鍵值,及如何略過和繼續陣列中的數字索引。
$fruits = array(
"fruits" => array("a"=>"orange","b"=>"banana","c"=>"apple"),
"numbers" => array(1, 2, 3, 4, 5, 6),
"holes" => array("first", 5 => "second", "third")
);
參考
list()
--------------------------------------------------------------------------------
函式:array_walk()
--------------------------------------------------------------------------------
陣列處理函式庫
array_walk
讓使用者自訂函數能處理陣列中的每一個元素。
語法: int array_walk(array arr, string func);
傳回值: 整數
函式種類: 資料處理
內容說明
此函式使每個陣列元素 arr 依序與函式名稱 func 相對應。元素傳送到函式 func 的第一個參數,若參數超過一個,則每次都會有警告訊息。要處理警告訊息,可在本函式前面加上 '@' 字元 (變成 @array_walk);或是使用 error_reporting 函式。
注意: 使用者自訂函式 func 真的會將陣列元素 arr 依序代入,所以任何對元素所做的改變都會影響到陣列本身。
使用范例
$fruits = array("d"=>"lemon","a"=>"orange","b"=>"banana","c"=>"apple");
function test_alter( $item1 ) {
$item1 = 'bogus';
}
function test_print( $item2 ) {
echo "$item2 \n";
}
array_walk( $fruits, 'test_print' );
array_walk( $fruits, 'test_alter' );
array_walk( $fruits, 'test_print' );
?>
參考
each() list()
--------------------------------------------------------------------------------
函式:arsort()
--------------------------------------------------------------------------------
陣列處理函式庫
arsort
將陣列的值由大到小排序。
語法: void arsort(array array);
傳回值: 無
函式種類: 資料處理
內容說明
這個函式將陣列的值重新排序,由大至小排列。陣列的索引亦跟著值的順序而變動。當您在程式中需要重新整理陣列值的順序時,就可以使用這個函式。
使用范例
底下的范例傳回的結果為
fruits[a] = orange
fruits[d] = lemon
fruits[b] = banana
fruits[c] = apple。
我們可以看到水果名 (陣列值) 已按英文字母的順序由 z 往 a 重新排序,而索引亦跟著值變動。
$fruits = array("d"=>"lemon","a"=>"orange","b"=>"banana","c"=>"apple");
arsort($fruits);
for(reset($fruits); $key = key($fruits); next($fruits)) {
echo "fruits[$key] = ".$fruits[$key]."\n";
}
?>
參考
asort() rsort() ksort() sort()
--------------------------------------------------------------------------------
函式:asort()
--------------------------------------------------------------------------------
陣列處理函式庫
asort
將陣列的值由小到大排序。
語法: void asort(array array);
傳回值: 無
函式種類: 資料處理
內容說明
這個函式將陣列的值重新排序,由小至大排列。陣列的索引亦跟著值的順序而變動。當您在程式中需要重新整理陣列值的順序時,就可以使用這個函式。
使用范例
底下的范例傳回的結果為
fruits[c] = apple
fruits[b] = banana
fruits[d] = lemon
fruits[a] = orange
我們可以看到水果名 (陣列值) 已按英
文字母的順序由 a 往 z 排序,而索引亦跟著值變動。
$fruits = array("d"=>"lemon","a"=>"orange","b"=>"banana","c"=>"apple");
asort($fruits);
for(reset($fruits); $key = key($fruits); next($fruits)) {
echo "fruits[$key] = ".$fruits[$key]."\n";
}
?>
參考
arsort() rsort() ksort() sort()
--------------------------------------------------------------------------------
函式:count()
--------------------------------------------------------------------------------
陣列處理函式庫
count
計算變數或陣列中的元素個數。
語法: int count(mixed var);
傳回值: 整數
函式種類: 資料處理
內容說明
這個函式用來計算陣列的元素個數 (亦可將變數代入,只不過傳回的整數將是 1)。變數還沒有設定時,傳回值為 0。變數若不是陣列,傳回值為 1。
參考
sizeof() isset() is_array()
--------------------------------------------------------------------------------
函式:current()
--------------------------------------------------------------------------------
陣列處理函式庫
current
傳回陣列中目前的元素。
語法: mixed current(array array);
傳回值: 混合型態資料
函式種類: 資料處理
內容說明
說明: 每一個陣列變數都有一個內部指標,指到它的每一個元素。此外,為了交互參考,陣列有份所有元素的雙向鏈結表。陣列的內部指標指到原先插入的元素上,直到程式執行到有更動陣列指標的函式。函式 current() 簡單地傳回陣列元素中目前指到的陣列內部指標。它不會改變指標的值,若陣列指標指到內部指標表外,則傳回 false 的值。
注意: 若陣列中包含空的元素 (0 或者 "" 空字串),則本函式會傳回 false 值。要是目前元素是個零值的空元素或者是超出陣列指標,結果當然是未定的 false 值。遇到這種情形,可以使用 each() 函式會更適合。
參考
end() next() prev() reset()
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
函式:each()
--------------------------------------------------------------------------------
陣列處理函式庫
each
傳回陣列中下一個元素的索引及值。
語法: array each(array array);
傳回值: 陣列
函式種類: 資料處理
內容說明
傳回陣列為目前陣列指標的 索引/值 對。傳回的陣列有四個元素,依序為 0, 1, 索引, 及值。前述的 0 與 索引 為陣列的索引,1 與 值則為陣列元素的值。
使用范例
范例一:
$foo = array( "bob", "fred", "jussi", "jouni" );
$bar = each( $foo );
?>
上面的例子,傳回陣列 $bar 的 索引/值 為
0 => 0
1 => 'bob'
key => 0
value => 'bob'
范例二:
$foo = array( "Robert" => "Bob", "Seppo" => "Sepi" );
$bar = each( $foo );
?>
這個的例子,傳回陣列 $bar 的 索引/值 為
0 => 'Robert'
1 => 'Bob'
key => 'Robert'
value => 'Bob'
范例三:
each() 函式最典型的例子是拿來與 list() 函式合用,如下例的 $HTTP_POST_VARS 變數。
echo "POST 所送出的值為: ";
while ( list( $key, $val ) = each( $HTTP_POST_VARS ) ) {
echo "$key => $val ";
}
?>
參考
current() key() list() next() prev() reset()
--------------------------------------------------------------------------------
函式:end()
--------------------------------------------------------------------------------
陣列處理函式庫
end
將陣列的內部指標指到最的元素。
語法: end(array array);
傳回值: 無
函式種類: 資料處理
內容說明
本函式會改變陣列的內部指標,它將指標指到最一個元素上。
參考
current() each() next() reset()
--------------------------------------------------------------------------------
函式:key()
--------------------------------------------------------------------------------
陣列處理函式庫
key
取得陣列中的索引資料。
語法: mixed key(array array);
傳回值: 混合型態資料
函式種類: 資料處理
內容說明
本函式從目前陣列的指標,傳回其索引。
參考
current() next()
--------------------------------------------------------------------------------
函式:ksort()
--------------------------------------------------------------------------------
陣列處理函式庫
ksort
將陣列的元素依索引排序。
語法: void ksort(array array);
傳回值: 無
函式種類: 資料處理
內容說明
本函式將陣列中的元素依索引排序,排序的索引和值仍然對應。
使用范例
$fruits = array("d"=>"lemon","a"=>"orange","b"=>"banana","c"=>"apple");
ksort($fruits);
for(reset($fruits); $key = key($fruits); next($fruits)) {
echo "fruits[$key] = ".$fruits[$key]."\n";
}
?>
上面的例子,傳回的資料為
fruits[a] = orange
fruits[b] = banana
fruits[c] = apple
fruits[d] = lemon
參考
arsort() asort() sort() rsort()
--------------------------------------------------------------------------------
函式:list()
--------------------------------------------------------------------------------
陣列處理函式庫
list
列出陣列中元素的值。
語法: void list(...);
傳回值: 無
函式種類: 資料處理
內容說明
和 array 函式一樣,不算是正規的函式。list() 函式用在列出所有陣列中的數值。
使用范例
下面的范例列出從 MySQL 資料庫傳回的陣列資料。
員工姓名 |
薪資 |
$result = mysql($conn, "SELECT id, name, salary FROM employees");
while (list($id, $name, $salary) = mysql_fetch_row($result)) {
print(" \n".
" $name | \n".
" $salary | \n".
" \n");
}
?>
參考
each() array()
--------------------------------------------------------------------------------
函式:next()
--------------------------------------------------------------------------------
陣列處理函式庫
next
將陣列的內部指標向移動。
語法: mixed next(array array);
傳回值: 混合型態資料
函式種類: 資料處理
內容說明
這個函式傳回陣列下個元素的內部指標,若沒有下個元素,則傳回 false 值。當然,若是一個空的陣列,它也傳回 false 值。要正確地處理可能是空的陣列,可以使用 each() 函式。此函式看起來像 current() 函式,不同地方在本函式使指標往指到下一個元素,並傳回新的指標處的元素值,意即指標移,並傳回下一個元素值。
參考
current() end() prev() reset()
--------------------------------------------------------------------------------
函式:pos()
--------------------------------------------------------------------------------
陣列處理函式庫
pos
傳回陣列目前的元素。
語法: mixed pos(array array);
傳回值: 混合型態資料
函式種類: 資料處理
內容說明
此函式其實就是 current() 函式。
參考
end() next() prev() reset()
--------------------------------------------------------------------------------
函式:prev()
--------------------------------------------------------------------------------
陣列處理函式庫
prev
將陣列的內部指標往前移動。
語法: mixed prev(array array);
傳回值: 混合型態資料
函式種類: 資料處理
內容說明
這個函式傳回陣列前一個元素的內部指標,若沒有前一個元素,則傳回 false 值。當然,若是一個空的陣列,它也傳回 false 值。要正確地處理可能是空的陣列,可以使用 each() 函式。此函式有點像 next() 函式,只是 prev() 函式是將指標往前移,而 next() 函式是將指標往移。
參考
current() end() next() reset()
--------------------------------------------------------------------------------
函式:range()
--------------------------------------------------------------------------------
陣列處理函式庫
range
建立一個整數范圍的陣列。
語法: array range(int low, int high);
傳回值: 陣列
函式種類: 資料處理
內容說明
此函式建立一個由小到大的連續整數陣列。在 shuffle() 函式有使用范例。
參考
shuffle()
--------------------------------------------------------------------------------
函式:reset()
--------------------------------------------------------------------------------
陣列處理函式庫
reset
將陣列的指標指到陣列第一個元素。
語法: mixed reset(array array);
傳回值: 混合型態資料
函式種類: 資料處理
內容說明
本函式將陣列的指標重設,將指標改指到陣列的第一個元素。傳回值的內容也是陣列的第一個元素。
使用范例
技巧:
kk@shonline.de 指出 (30-Jul-1998),當陣列的資料不夠穩定時,使用 reset() 會有警告訊息。最常發生的時候是處理 HTML 表單(form)的輸入資料時,若使用者輸入的資料不夠充份,或使用者故意增刪輸入 (input) 欄位,就有可能會有警告訊息。用 @reset() 的方式可使警告訊息不出現 (在 reset() 前加 @),不過這只是掩耳盜鈴的方式;要斧底抽薪的方法是使用 if (isset()) 的方式 (參見 4.48.14 isset() 函式),如下例
if (isset($form_array)) {
reset($form_array);
while (list($k, $v) = each($form_array)) {
do_something($k, $v);
}
}
?>
參考
current() each() next() prev()
--------------------------------------------------------------------------------
函式:rsort()
--------------------------------------------------------------------------------
陣列處理函式庫
rsort
將陣列的值由大到小排序。
語法: void rsort(array array);
傳回值: 無
函式種類: 資料處理
內容說明
本函式將陣列依由大到小的方式重排。
使用范例
$fruits = array("lemon","orange","banana","apple");
rsort($fruits);
for(reset($fruits); list($key,$value) = each($fruits); ) {
echo "fruits[$key] = ".$value."\n";
}
?>
處理的結果為
fruits[0] = orange
fruits[1] = lemon
fruits[2] = banana
fruits[3] = apple
參考
arsort() asort() ksort() sort() usort()
--------------------------------------------------------------------------------
函式:shuffle()
--------------------------------------------------------------------------------
陣列處理函式庫
shuffle
將陣列的順序弄混。
語法: void shuffle(array array);
傳回值: 無
函式種類: 資料處理
內容說明
本函式將陣列以隨機的方式使全部元素重新亂排。
使用范例
$numbers = range(1,20);
srand(time());
shuffle($numbers);
while (list(,$number) = each($numbers)) {
echo "$number ";
}
?>
注意:
ccunning@math.ohio-state.edu 指出 (31-May-1999),在 Solaris 上由受了 libc 函式館的影響,會使本函式出現問題。目前解決的方式如下面的例子。(注: 或許之新的 PHP 版本會修正這個問題。)
function myshuffle($array) {
mt_srand((double) microtime()*1000000);
$num = count($array);
for ($i=0; $i<$num-1; $i++) {
$n = mt_rand($i+1,$num);
$temp = $array[$n];
$array[$n] = $array[$i];
$array[$i] = $temp;
}
}
$array = array(1,2,3,4,5,6,7,8,9,10);
myshuffle(&$array);
while (list(,$var)=each($array)) {
echo $var . " ";
}
?>
參考
arsort() asort() ksort() rsort() sort() usort()
--------------------------------------------------------------------------------
函式:sizeof()
--------------------------------------------------------------------------------
陣列處理函式庫
sizeof
獲知陣列的大小。
語法: int sizeof(array array);
傳回值: 整數
函式種類: 資料處理
內容說明
本函式以整數型態傳回陣列的元素個數。
參考
count()
--------------------------------------------------------------------------------
函式:sort()
--------------------------------------------------------------------------------
陣列處理函式庫
sort
將陣列排序。
語法: void sort(array array);
傳回值: 無
函式種類: 資料處理
內容說明
本函式將陣列依由小到大的方式重排。
使用范例
$fruits = array("lemon","orange","banana","apple");
sort($fruits);
for(reset($fruits); list($key,$value) = each($fruits); ) {
echo "fruits[$key] = ".$value."\n";
}
?>
傳回的結果為
fruits[0] = apple
fruits[1] = banana
fruits[2] = lemon
fruits[3] = orange
參考
arsort() asort() ksort() rsort() usort()
--------------------------------------------------------------------------------
函式:uasort()
--------------------------------------------------------------------------------
陣列處理函式庫
uasort
將陣列依使用者自定的函式排序。
語法: void uasort(array array, function cmp_function);
傳回值: 無
函式種類: 資料處理
內容說明
本函式將陣列依使用者自定的方式重排,當然元素的索引和值仍然保持對應的關系。當您覺得需要自行設計排序的方式時,可以先自訂處理函式,再使用本函式將陣列值排序。
參考
arsort() asort() ksort() rsort() sort() uksort()
--------------------------------------------------------------------------------
函式:uksort()
--------------------------------------------------------------------------------
陣列處理函式庫
uksort
將陣列的索引依使用者自定的函式排序。
語法: void uksort(array array, function cmp_function);
傳回值: 無
函式種類: 資料處理
內容說明
本函式將陣列的索引依使用者自定的方式重排,cmp_function 即使用者自行開發的函式。
使用范例
function mycompare($a, $b) {
if ($a == $b) return 0;
return ($a > $b) ? -1 : 1;
}
$a = array(4 => "four", 3 => "three", 20 => "twenty", 10 => "ten");
uksort($a, mycompare);
while(list($key, $value) = each($a)) {
echo "$key: $value\n";
}
?>
上面的程式傳回資料為
20: twenty
10: ten
4: four
3: three
參考
arsort() asort() ksort() rsort() sort() uasort()
--------------------------------------------------------------------------------
函式:usort()
--------------------------------------------------------------------------------
陣列處理函式庫
usort
將陣列的值依使用者自定的函式排序。
語法: void usort(array array, function cmp_function);
傳回值: 無
函式種類: 資料處理
內容說明
本函式將陣列的值依使用者自定的方式重排。若程式中需要使用特殊的排序方式,則可以使用這個函式。
使用范例
function cmp($a,$b) {
if ($a == $b) return 0;
return ($a > $b) ? -1 : 1;
}
$a = array(3,2,5,6,1);
usort($a, cmp);
while(list($key,$value) = each($a)) {
echo "$key: $value\n";
}
?>
此例的傳回值為
0: 6
1: 5
2: 3
3: 2
4: 1
參考
arsort() asort() ksort() rsort() sort()
(http://www.fanqiang.com)
進入【UNIX論壇】
|