<?php // 數組函數講解 //count //array_key_exists 檢查給定的鍵名或索引是否存在於數組中 //array_flip 交換數組中的鍵和值 //in_array 檢查數組中是否存在某個值 //range 創建一個包含指定範圍單元的數組 // shuffle 打亂數組 // array_unique 移除數組中重複的值 // array_reverse 返回一個單元順序相反的數組 /* array_push 將一個或多個單元壓入數組的末尾 還不如用 $array[] =(入棧) array_pop 將數組最後一個單元彈出(出棧) array_shift 將數組開頭的單元移出數組 array_unshift 在數組開頭插入一個或多個單元 全部的數值鍵名將修改成從零開始從新計數, 全部的文字鍵名保持不變。 返回 array 數組新的單元數目。 */ //sort 對數組排序 //asort 對數組進行排序並保持索引關係 //ksort 對數組按照鍵名排序 // array_values 返回數組中全部的值 // natsort — 用「天然排序」算法對數組排序 // natcasesort — 用「天然排序」算法對數組進行不區分大小寫字母的排序 // uasort — 使用用戶自定義的比較函數對數組中的值進行排序並保持索引關聯 // usort 使用用戶自定義的比較函數對數組中的值進行排序 // array_multisort — 對多個數組或多維數組進行排序 // array_slice — 從數組中取出一段 // array_splice — 把數組中的一部分去掉並用其它值取代 // array_combine — 建立一個數組,用一個數組的值做爲其鍵名,另外一個數組的值做爲其值 // array_merge — 合併一個或多個數組若是輸入的數組中有相同的字符串鍵名,則該鍵名後面的值將覆蓋前一個值。 // 然而,若是數組包含數字鍵名,後面的值將不會覆蓋原來的值,而是附加到後面。 // 若是隻給了一個數組而且該數組是數字索引的,則鍵名會以連續方式從新索引 // array_intersect — 計算數組的交集 // array_diff — 計算數組的差集 // array_rand — 從數組中隨機取出一個或多個單元 // array_sum — 計算數組中全部值的和 // array array_keys ( array $input [, mixed $search_value [, bool $strict ]] // 若是指定了可選參數 search_value,則只返回該值的鍵名。不然 input 數組中的全部鍵名都會被返回。 // 自 PHP 5 起,能夠用 trict 參數來進行全等比較(===)。 // array_search — 在數組中搜索給定的值,若是成功則返回相應的鍵名 // array_count_values 統計數組中全部的值出現的次數 // array_filter — 用回調函數過濾數組中的單元 // array_walk 對數組中的每一個成員應用用戶函數(通常狀況用戶函數接受兩個參數如用戶函數有第三個參數能夠用第三個函數傳遞) // array_map — 將回調函數做用到給定數組的單元上array_map() 返回一個數組,該數組包含了 arr1 中的全部單元通過 callback 做用過以後的單元。 // callback 接受的參數數目應該和傳遞給 array_map() 函數的數組數目一致。 /* count 函數 做用:計算數組的單元個數[或對象的屬性個數] 注:count函數的參數,能夠是數組,也能夠是"非數組" 返回值分3種狀況討論 1: 數組/對象, 返回數組的單元個數/對象的屬性個數 2: NULL ,返回0 3: 非數組,也非NULL,統統返回1 4.第二個參數表明是否遞歸計算多維數組的個數。 */ $arr = array('a','b','c','d'); echo count($arr),'<br />'; // 4 $arr = array('a','b','c',array('d','e')); // 6 echo count($arr,true).'<br/>'; /* array_key_exists 與isset區別 array_key_exists 是對數組鍵的一個檢查。 isset當值爲null是返回false */ $search_array = array('first' => null, 'second' => 4); // returns false var_dump(isset($search_array['first'])); // returns true array_key_exists('first', $search_array); // array_flip // 交換鍵值, 即值作鍵,鍵作值 $arr = array(0=>'a',1=>'b',2=>'b',3=>'c'); print_r($arr); print_r(array_flip($arr)); //當後面鍵名重複,後面會覆蓋前面的 //寫一個函數判斷某個值在不在數組中 function inarr($arr,$val){ $find=false; foreach ($arr as $v){ if($val===$v){ $find=true; } return $find; } } $val='a'; var_dump(inarr($arr, $val)); //也能夠用in_array var_dump(in_array($val,$arr)); //range() : 生成一個指定範圍的數組 $arr = range(1,10,2); //第三個參數是步長 print_r($arr); echo array_sum($arr); // shuffle打亂數組 if(shuffle($arr)) { echo '打亂成功'; print_r($arr); // 數組自己被打亂了,由於shuffle函數,是引用傳值 } //寫一個函數去重複的值 $arr = array('a','b','a','c','d','e','f','f','f'); function uni($arr){ $temp=array(); foreach ($arr as $v){ if(!in_array($v, $temp)){ $temp[]=$v; }else{ continue; } } return $temp; } print_r(uni($arr)); //用系統函數 print_r(array_unique($arr)); $arr = array('a'=>'春','b'=>'夏','c'=>'秋','d'=>'冬'); print_r(array_reverse($arr)); //此時,對於索引數組,索引沒調過來,只調換的值 print_r(array_reverse($arr),true); //索引也調換了 /* 隊列,就像人排隊來新人,站隊伍的後面 先進先出*/ // 棧: 就像從槍口上子彈,後進先出 /* 數組徹底能夠達到隊列和棧的效果 須要用到如下幾個函數 array_push array_pop array_shift array_unshift */ /** 從後往前讀數組,讀出來的單元,追加到一個備用數組裏 **/ $arr = array('a'=>'春','b'=>'夏','c'=>'秋','d'=>'冬'); function rev2($arr) { $rev = array(); while(count($arr)) { $v = array_pop($arr); //彈出 array_push($rev,$v); //最加 } return $rev; } //用數組知識完成下題 //把 '1234567'轉換成'1,234,567' function formatstr($str){ $bak=array(); $arr=str_split($str); //1,2,3,4,5,6,7 $i=0; while(!!$cnt=count($arr)){ array_unshift($bak, array_pop($arr)); //將$arr數組末尾彈出加入到$bak數組中 $i++; if($i%3==0&&$cnt!=1){ //$cnt!=1防止出現第一個字符就是,號 array_push($arr, ','); } } return implode($bak); } $str = '1234567'; print_r(formatstr($str)); echo '<br />'; // 1,234,567 // 用系統函數 print_r(number_format($str)); //array_key 第三個參數匹配第二個參數類型要相同 $lamp = array("a"=>"Linux","b"=>"Apache","c"=>"MySQL","d"=>"PHP" ); print_r( array_keys($lamp) ); //輸出:Array ( [0] => a [1] => b [2] => c ) print_r( array_keys($lamp,"Apache") ); //使用第二個可選參數輸出:Array ( [0] => b) $a = array(10, 20, 30, "10"); //聲明一個數組,其中元素的值有整數10和字符串」10」 print_r( array_keys($a,"10",false) ); //使用第三個參數 (false)輸出:Array ( [0] => 0 [1] => 3 ) $a = array(10, 20, 30, "10"); //聲明一個數組,其中元素的值有整數10和字符串」10」 print_r( array_keys($a,"10",true) ); //使用第三個參數 (true)輸出:Array ( [0] => 3) $array = array( 1, "php", 1, "mysql", "php" ); //聲明一個帶有重複值的數組 $newArray = array_count_values( $array ); //統計數組$array中全部值出現的次數 print_r( $newArray ); //輸出:Array([1] => 2 [php] => 2 [mysql] => 1) //回調數組函數 /** 自定義函數myFun,爲數組過濾設置條件 @param int $var 數組中的一個元素值 @return bool 若是參數能被2整除則返回真 */ function myFun($var){ //過濾條件函數 if( $var % 2 == 0 ) return true; } $array = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5); print_r(array_filter($array,'myFun')); /* 過濾後的結果輸出Array ( [b] => 2 [d] => 4 ) */ /** 定義一個能夠做爲回調的函數,名稱爲myfun1 @param string $value 一個字符串參數,接收數組的值 @param string $key 一個字符串參數,接收數組的鍵 */ function myfun1( $value, $key ) { //函數要兩個參數 echo "The key $key has the value $value<br>"; } //定義一個數組$lamp $lamp = array( "a"=>"Linux", "b"=>"Apache", "c"=>"Mysql", "d"=>"PHP" ); array_walk($lamp, 'myfun1'); print_r($lamp); /** 定義一個能夠做爲回調的函數,名稱爲myfun2 @param string $value 一個字符串參數,接收數組的值 @param string $key 一個字符串參數,接收數組的鍵 @param string $p 一個字符串參數,接收一個自定義的鏈接符號字符串 */ function myfun2( $value, $key, $p) { echo "$key $p $value <br>"; } //使用array_walk函數傳入三個參數 array_walk( $lamp, "myfun2", "has the value" ); /* 執行後輸出以下結果: a has the value Linux b has the value Apache c has the value MySQL d has the value PHP */ /** 定義一個能夠做爲回調的函數,名稱爲myfun3,改變數組元素的值 @param string $value 一個引用參數,接收數組變量,請注意&$value傳入引用 @param string $key 一個字符串參數,接收數組的鍵 */ function myfun3( &$value, $key ) { $value = "Web"; //將改變原數組中每一個元素的值 } //使用array_walk函數傳入兩個參數,其中第一個參數爲引用 array_walk( $lamp,"myfun3" ); print_r( $lamp ); //輸出:Array ( [a] => Web [b] => Web [c] => Web [d] => Web ) function myfun4($v) { if ($v === "MySQL") { //若是數組中元素的值恆等於MySQL條件成功 return "Oracle"; //返回Oracle } return $v; //不等於MySQL的元素都返回傳入的值,即原型返回 } //聲明一個有4個元素的數組$lamp $lamp = array( "Linux", "Apache", "MySQL", "PHP" ); //使用array_map()函數傳入一個函數名和一個數組參數 print_r( array_map( "myfun4", $lamp ) ); /*上面程序執行後輸出Array ( [0] => Linux [1] => Apache [2] => Oracle [3] => PHP ) */ /** 聲明一個函數使用多個參數, 回調函數接受的參數數目應該和傳遞給array_map()函數的數組數目一致 自定義一個函數須要兩個參數,兩個數組中的元素依次傳入 @param mixed $v1 數組中前一個元素的值 @param mixed $v2 數組中下一個元素的值 @return string 提示字符串 */ function myfun5( $v1, $v2 ) { if ($v1 === $v2) { //若是兩個數組中的元素值相同則條件成功 return "same"; //返回same, 說明兩個數組中對應的元素值相同 } return "different"; //若是兩個數組中對應的元素值不一樣,返回different } $a1 = array("Linux", "PHP", "MySQL"); //聲明數組$a1,有三個元素 $a2 = array("Unix", "PHP", "Oracle"); //數組$a第二個元素值和$a中第二個元素的值相同 print_r( array_map( "myfun5", $a1, $a2) ); //使用array_map()函數傳入多個數組 /*上面程序執行後輸出:Array ( [0] => different [1] => same [2] => different ) */ //當自定義函數名設置爲 null 時的狀況 $a1 = array("Linux", "Apache"); //聲明一個數組$a1, 有兩個元素 $a2 = array("MySQL", "PHP"); //聲明另外一個數組$a2,也有兩個元素 print_r( array_map( null, $a1, $a2) ); //經過第一個參數設置爲NULL,構造一個數組的數組 /* 上面程序執行後輸出:Array ( [0] => Array ( [0] => Linux [1] => MySQL ) [1] => Array ( [0] => Apache [1] => PHP ) ) */ $input = array( "Linux", "Apache", "MySQL", "PHP" ); //原數組中的第二個元素後到數組結尾都被刪除 array_splice($input, 2); print_r($input); //輸出:Array ( [0] => Linux [1] => Apache ) $input = array("Linux", "Apache", "MySQL", "PHP"); //從第二個開始移除直到數組末尾倒數第1個爲止中間全部的元素 array_splice($input, 1, -1); print_r($input); //輸出:Array ( [0] => Linux [1] => PHP ) $a1 = array( "OS", "WebServer", "DataBase", "Language" ); //聲明第一個數組做爲參數1 $a2 = array( "Linux", "Apache", "MySQL", "PHP"); //聲明第二個數組做爲參數2 print_r( array_combine( $a1, $a2 ) ); //使用arrray_combine()將兩個數組合並 /* 輸出:Array ( [OS] => Linux [WebServer] => Apache [DataBase] => MySQL [Language] => PHP ) */ $a1 = array( "a"=>"Linux", "b"=>"Apache" ); $a2 = array( "c"=>"MySQL", "b"=>"PHP" ); print_r( array_merge( $a1, $a2 ) ); //輸出: Array ( [a] => Linux [b] => PHP [c] => MySQL ) //僅使用一個數組參數則鍵名以0開始進行從新索引 $a = array( 3=>"PHP", 4=>"MySQL" ); print_r( array_merge( $a ) ); //輸出:Array ( [0] => PHP [1] => MySQL ) $lamp = array( "a"=>"Linux", "b"=>"Apache", "c"=>"MySQL", "d"=>"PHP" ); echo array_rand( $lamp,1 ); //隨機從數組$lamp中取1個元素的鍵值,例如b echo $lamp[array_rand($lamp)]."<br>"; //經過隨機的一個元素的鍵值獲取數組中一個元素的值 $key = array_rand( $lamp,2 ); //隨機從數組$lamp中取2個元素的鍵值賦給數組$key echo $lamp[$key[0]]."<br>"; //經過數組$key中第一個值獲取數組$lamp中一個元素的值 echo $lamp[$key[1]]."<br>"; //經過數組$key中第二個值獲取數組$lamp中另外一個元素的值 ?>