PHP數組排序執行個體與函數

來源:互聯網
上載者:User

PHP數組排序執行個體與函數


PHP4函數手冊 array裡的算是看完咯, 明天在看看最新的手冊。。。。

array_values($arr) array
返回數組所有元素
複製代碼 - PHP100.com<?php
$arr = array("a", "b", "c");
$arr = array_flip($arr); //反轉數組的下標和值現在的$arr = array(0, 1, 2);
$arr = array_values($arr); //返回數組$arr中的所有元素
print_r($arr); //結果: array(0, 1, 2);
?>

 

array_walk($arr, $func, [$data]) bool
使用使用者自訂的函數遍曆所有的元素,返回true/false
注意:此函數只處理數組的第一維
$func是一個函數名
預設會傳入兩個參數 第一個 $arr的值, 第二個$arr的下標, 一對一對的傳哦
複製代碼 - PHP100.com<?php
$arr = array('a', 'b', 'c');
array_walk($arr, 'test'); //這裡第二個參數test就是函數名
function test(&$val, $key) //這裡第一個參數加上引用, 那麼修改$val就等於修改$arr中的元素
{
$val = 'x_' . $val; //這裡給他加一個首碼
}
print_r($arr); //輸出結果 array('x_a', 'x_b', 'x_c');
//這裡如果把$arr改成 $arr = array('a', 'b', 'c', array(1, 2, 3)); 列印結果將是 array('x_a', 'x_b', 'x_c', 'x_Array');
?>


現在傳入第三那個參數$data, 如果有傳入第三個參數,那麼第三個參數將傳給第二個參數定義的函數當中的第三個參數
複製代碼 - PHP100.com<?php
array_walk($arr, 'test', 'x_');
function test(&$val, $key, $prefix)
{
$val = $prefix . $val; //其實這裡的$prefix就是上面的x_
}
print_r($arr); //輸出結果和上面一樣 array('x_a', 'x_b', 'x_c');
?>

 

arsort($arr) bool
對數組$arr進行倒序排列並保留下標和值的關係,如果排序成功返回true 否則返回 false
此函數只處理數組的第一維
複製代碼 - PHP100.com<?php
$arr = array('a' => 'a', 'b' => 'b', 'c' => 'c');
arsort($arr);
print_r($arr); //列印結果: array('c' => 'c', 'b' => 'b', 'a' => 'a'); 如果有數字那麼數字會在字元前面
?>


asort($arr) bool
對數組$arr進行正序排列也就是a-z這樣排列, 傳回值和上面一樣
此函數也保留下標和值的關係
複製代碼 - PHP100.com<?php
$arr = array('a' => 'a', 'b' => 'b', 'c' => 'c');
asort($arr);
print_r($arr); //結果沒變, 就是原那數組
$arr = array('c' => 'c', 'b' => 'b', 'a' => 'a');
asort($arr);
print_r($arr); //結果:array('a' => 'a', 'b' => 'b', 'c' => 'c');
?>


compact($varname, ...., $varname) array
接受n個$varname並將$varname當做下標$varname的值當做值建立一個數組$varname可以為數組
解釋不清楚, 看例子
複製代碼 - PHP100.com<?php
$a = "變數a";
$b = "變數b";
$arr = compact('a', 'b'); //這裡傳入 a b 分別為上面定義的變數名稱
print_r($arr); //列印結果為 array('a' => '變數a', 'b' => '變數b');
//還可以把變數名稱當做數組傳入
$vars = array('a', 'b');
$arr = compact($vars);
print_r($arr); //結果和上面一樣, 其實這個函數就是做extract的相反操作
?>


extract($arr, $type, $prefix) int
將數組$arr的下標當做變數名, 值當做變數的值
$arr 目標數組
$type 這個是遇過遇到相同下標使用什麼方式處理, 值是PHP已經定義了的常量
EXTR_OVERWRITE 如果相同, 那麼就覆蓋前面的那個變數, 預設就是這個
EXTR_SKIP 如果相同, 不覆蓋前面那個變數
EXTR_PREFIX_SAME 如果相同, 那麼使用第三個參數$prefix加到變數名前
EXTR_PREFIX_ALL 把所有變數名稱都加上$prefix當做首碼
注意在$type為EXTR_PREFIX_SAME或EXTR_PREFIX_ALL時才需要傳入參數$prefix, 不然傳了也沒用。。。
例子
複製代碼 - PHP100.com<?php
$arr = array('a' => '變數a', 'b' => '變數b');
extract($arr, EXTR_OVERWRITE); //如果有相同,那麼覆蓋
echo $a; //輸出結果將是 '變數a'
echo $b; //結果: '變數b'
$arr = array('a' => '變數a', 'b' => '變數b', 'a' => '第二個變數a'); //這裡有兩個元素下標都為a
extract($arr);
echo $a; //輸出結果是: '第二個變數a' 很明顯已經覆蓋了 '變數a' 因為預設第二個參數是 EXTR_OVERWRITE
?>

 

count($arr) int
統計數組中的元素的數目
複製代碼 - PHP100.com<?php
$arr = array('a', 'b');
echo count($arr); //很明顯結果為2
?>

 

current($arr) mixed
返回數組中當前指標所指的元素,此函數別名 pos
複製代碼 - PHP100.com<?php
$arr = array('a', 'b', 'c');
echo current($arr); //結果為 'a'
echo next($arr); //指標向下一個移動,所以現在指標所指的是b 輸出結果當然為 'b'
echo current($arr); //結果又是b 因為當前指標就在b這哦
echo end($arr) //指標移動到數組最後, 並返回結果, 所以結果為c
echo prev($arr); //指標向上一個移動, 結果b
echo key($arr); //返回指標所指元素的下標 因為上面指標到了b那麼所有 結果為1 因為b的下標就是1


echo reset($arr); //重設指標都數組開頭 結果a
?>

each($arr) array
重數組$arr中返回一對 key/value也就是 下標/值
複製代碼 - PHP100.com<?php
$arr = array('a' => 1, 'b' => 2, 'c' => c);
$res = each($arr);
print_r($res); //結果為 array('0' => 'a', 'key' => 'a', 1 => 1, 'value' => 1)
//返回結果 0 和 key 都代表 下標 1 和 value 代表值
//沒使用一次each數組內部指標就會向下移動一次, 如果已經是數組末端, 將返回false
$res = each($arr);
print_r($res); //結果就會變成 array('0' => 'b', 'key' => 'b', 1 => 2, 'value' => 2)
?>


list($val, .. , [$val]) void 無傳回值
把數組中的值賦給一些變數$val
複製代碼 - PHP100.com<?php
$arr = array('顏色', '字母A', '字母B');
list($color, $a, $b) = $arr; //注意這裡list的參數$val 位置是和數組中的位置對應, 重左到右
echo $color; //結果 '顏色'
echo $a; //結果 '字母A'
list($color, , $b) = $arr; //這樣空一個
echo $color; //結果 '顏色'
echo $a; //結果 一樣都沒有, 因為就沒給a賦值哦, 哪裡也空出來咯
echo $b; //結果 '字母B'
//list each 一起用
$arr = array('顏色', '字母A', '字母B');
while(list($key, $val) = each($arr)) {
echo '下標:' . $key;
echo '----值:' . $val;
echo '<br>';
}
//輸出結果為
//下標:0----值:顏色
//下標:1----值:字母A
//下標:2----值:字母B
?>

 

krsort($arr, [$type]) bool
對數組$arr按照其下標進行倒序排列
還有一個ksort(); 這個是按下標進行升序排列
$type 是排序方式
複製代碼 - PHP100.com<?php
$arr = array('a' => 1, 'b' => 2, 'c' => 3);
krsort($arr);
print_r($arr); //列印結果: array('c' => 3, 'b' => 2, 'a' => 1);
?>

 

range($go, $end, [$setup) array
這個有點不好解釋
複製代碼 - PHP100.com<?php
$arr = range(1, 10);
print_r($arr); //結果array(1, 2, 3, 4, .., 10);
$arr = range(1, 10, 2); //這裡指定第三個參數, 也就是步長
print_r($arr); //結果array(1, 3, 5, 7, 9);
$arr = range('a', 'z');
print_r($arr); //結果 array('a', 'b', 'c', ..., 'z');
?>


sort($arr);
將數組重a-z進行排序
複製代碼 - PHP100.com<?php
$arr = array("lemon","orange","banana","apple");
sort($arr);
print_r($arr); //結果array('apple', 'banana', 'lemon', 'orange');
//還有個z-a進行排序的函數rsort
?>


shuffle($arr) bool
將數組$arr進行亂排序, 也就是隨機排序
複製代碼 - PHP100.com<?php
$arr = range(1, 10);
shuffle($arr);
print_r($arr); //結果是什麼我也不知道, 因為是隨機的
?>

 

usort($arr, $func) bool
使用你自己定義的函數對$arr進行排序$func是自訂函數
複製代碼 - PHP100.com<?php
$arr = array(1, 5, 8 ,2 ,0 ,3);
usort($arr, 'test');
function test($a, $b) {
return $a == $b ? 0 : $a < $b ? 1 : -1;
}
print_r($arr); //列印結果 Array ( [0] => 8 [1] => 5 [2] => 3 [3] => 2 [4] => 1 [5] => 0 )
// 這函數沒弄懂哦。。 不知道參數$a , $b 代表的是什嗎? 看手冊也沒看懂, 如果這麼簡單的排序用ksort就行咯rsort
// 這樣的函數還有兩個 uksort,和uasort都沒弄懂, 鬱悶。。。
?>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.