header('Content-Type: text/html; charset=utf-8'); echo '<pre>'; function var_array($array) { echo '<pre>'; var_dump($array); echo '</pre>'; } function printr($array) { echo '<pre>'; print_r($array); echo '</pre>'; } function getArr($sNum, $eNum=1, $step=1) { $arr = range($sNum, $eNum, $step); $reArr = array(); foreach($arr as $v) { $reArr[$v] = rand(0,10); } unset($arr); return $reArr; } /** * array數組練習 */ //--------------------------------------------- //array_change_key_case() 改變數組索引的大小寫字母,由最後一個參數決定:CASE_UPPER(轉化為大寫),CASE_LOWER(預設 轉化為小寫) $expArr = array( 'fiRsT' => '1', 'sEcoNd' => '2', 'ThIrd' => array( 'HuiMa' => '3', 'nengZhuaNma' => '5', ) ); printr(array_change_key_case($expArr));//全轉化為小寫 printr(array_change_key_case($expArr['ThIrd'], CASE_UPPER));//全轉化為大寫 只對$expArr數組裡的某個index鍵轉化 //總結:該函數隻影響數組的一層。 並且不會對原數組產生影響 echo '<br/><hr/><br/>'; //--------------------------------------------- //array_chunk($array, $size, false) //將一個數組分割成一個多維陣列,size決定這個數組每$size個成為一個多維陣列, true/false決定新數組的索引值是否沿用原數組的鍵 $expArr = array('4','2','6','d','2'); printr(array_chunk($expArr, 3)); //總結:該函數隻影響數組的一層。 並且不會對原數組產生影響 echo '<br/><hr/><br/>'; //--------------------------------------------- //array_combine($keyArr, $valArr) //將兩個數組組合成一個數組,$keyArr做為鍵,$valArr做為值 $expKey = array('g', 'd', 't'); $expVal = array('5', '8', '7'); printr(array_combine($expKey, $expVal)); //該函數同樣隻影響數組的一層,並且返回一個新數組 echo '<br/><hr/><br/>'; //--------------------------------------------- //array_count_values($array) //統計$array數組中每個value出現的次數,並以他個value做為新數組的鍵,出現次數做為value $array = array('v1'=>'265', 'v2'=>'352', 'v3'=>'265', 'v4'=>'349', 'v5'=>'265'); printr(array_count_values($array)); //總結:該函數只能用於統計值為 string和integer類型的value,其他類型會發warning! echo '<br/><hr/><br/>'; //--------------------------------------------- //array_diff($array1, $array2...) //以$array1為基礎數組,他的值不出現在其他任何參數數組裡的值組成一個新數組 $arr1 = array('v4'=>458, 'gren', 'b5', 'a5'); $arr2 = array('v4'=>598, 'red', 'a5', 'c4'); printr(array_diff($arr1, $arr2)); //總結:拿一個數組到一堆數組中找出這個數組中沒有的值,統計、資料對比應該會用到 //array_intersect($array, $parArr, ....) //該函數同array_diff在功能上一樣,只是array_intersect()返回的是共有的資料,array_diff則是只存在於$array中的資料 // echo '<br/><hr/><br/>'; //--------------------------------------------- //array_diff_assoc($array1, $array2...) //同 array_diff()函數,但是這個也會拿key進行對比 // echo '<br/><hr/><br/>'; //--------------------------------------------- //array_diff_key //同array_diff()函數 //只是這個只拿$array1的key去與其他參數數組進行尋找 // echo '<br/><hr/><br/>'; //--------------------------------------------- //array_diff_uassoc($arr1, $parArr...., 回呼函數) //功能同array_diff(),但是需要使用者定義一個回呼函數 //未明白該函數的作用 // echo '<br/><hr/><br/>'; //--------------------------------------------- //array_diff_ukey($arr1, $parArr...., 回呼函數) //功能同array_diff_key(),只不過和array_diff_uassoc一樣,需要一個回呼函數 // // echo '<br/><hr/><br/>'; //--------------------------------------------- //array_fill($startInt, $numInt, $value) //把$value填充到一個新數組,新數組的索引起始位置開始由$startInt決定,$numInt則控制這個數組產生多少個索引。 //tip:除了$value,$startInt,$numInt必須為數字,否則報錯 printr(array_fill(2, 5, 'value')); //總結:還沒想到幹啥用 echo '<br/><hr/><br/>'; //--------------------------------------------- //array_fill_keys($arrKeys, $value); //功能同array_fill()函數。只不過這裡用$arrKeys【一個數組的值】來做為新數組的鍵 $arrKeys = array('45', 'd', 'b', 'c'); printr(array_fill_keys($arrKeys, 'value')); echo '<br/><hr/><br/>'; //--------------------------------------------- //array_filter($arr, callBack回呼函數) //過濾函數,通過對$arr數組的值的判斷,如果 callBack回呼函數 返回true,則將當前鍵以及值添加到新的數組裡 //TIP:回呼函數可以寫個規則,來過濾掉裡邊不符合規則的數組鍵 function cb($val) { return $val%2 == 0; } $array = array('k1'=>3, 'k2'=>5,'k4'=>54654, 'k5'=>8794, 8945, 32549564); printr($array, 'cb'); //tip:回呼函數名建議用引號引起來 //總結:該方法可以做成一個資料過濾的整合 unset($array); echo '<br/><hr/><br/>'; //--------------------------------------------- //array_flip($array) //將數組中key和value的關係轉換。只支援string和integr類型的鍵,其他類型將會發出警告,並且有問題的索引值不轉換。在產生的新的數組,如果鍵相同,他會不停的替換掉現有鍵的值 $arr = array('k1'=>'v1', 'k2'=>'v2', 'k3'=>'v4', 'k4'=>'v4', 'k5'=>'v5'); printr(array_flip($arr)); unset($arr); echo '<br/><hr/><br/>'; //--------------------------------------------- //array_key_exists($key, $array) //判斷一個鍵是否存在於當前數組中,返回bool。也可用來判斷對象 $array = array('cb' => 234, 'dv'=>45, 'one'=>897); if(array_key_exists('one', $array)) echo '存在這個數組中'; else echo '不存在'; echo '<br/><hr/><br/>'; //--------------------------------------------- //array_keys($array, $selSearch_value) //返回數組中的鍵名並組成一個新數組,如果指定了$selSearch_value值,那麼將返回數組裡等於$selSearch_value的鍵名 $array = getArr(4, 10); printr(array_keys($array)); printr(array_keys($array, '5'));//帶值的搜尋 unset($array); //總結:這個也可用於資料統計,資料對比驗證 echo '<br/><hr/><br/>'; //--------------------------------------------- echo 'array_map:'; //array_map('callBack', $array,...) //把傳入的函數,返回經callback回呼函數的傳回值 //回呼函數也可以返回一個數組。並且,回呼函數只接受一個數組裡的值傳入 function mapCb($n) { return $n*$n*$n; } $array = getArr(4, 15); printr(array_map('mapCb', $array)); echo '<br/><hr/><br/>'; //--------------------------------------------- //array_merge($array,$array2...) //將多個數組組成一個數組,並對數字索引進行重新編寫。 $arr1 = getArr(1, 5); $arr2 = getArr(5, 10); printr(array_merge($arr1, $arr2)); //總結:將多個數組組成一個新數組。 echo '<br/><hr/><br/>'; //--------------------------------------------- //array_merge_recursive($arr1, $arr2....) //功能同上。但函數會將鍵名相同的值組成一個新數組,而不是替換掉 //但如果要用,根據實際情況使用 echo '<br/><hr/><br/>'; //--------------------------------------------- //array_multisort() //多維陣列排序,目前只實現了二維數組排序。三維估計不能排 //該函數會直接改變員數組順序 echo '<br/><hr/><br/>'; //--------------------------------------------- //array_pad($arr, $size, $value) //對數組進行填充,如果當前$arr的長度小於$size,那麼,就用$value來填充$arr數組,直至$arr的長度與$size相等 //如果$arr的長度大於或等於$size,那麼該函數將不會對$arr進行填充。 $size小於0則填充在$arr的左邊,大於0則右邊 echo '<br/><hr/><br/>'; //--------------------------------------------- //array_pop($array) //去掉數組的最後一個鍵。 echo '<br/><hr/><br/>'; //--------------------------------------------- //array_product($arr) //返回一個數組中所有數值的乘積。 //tip:該函數無法處理非數實值型別的資料。如果傳入數組裡包含‘a、b之類字串',那麼php會報錯 $arr = array(4,5,5); echo array_product($arr); echo '<br/><hr/><br/>'; //--------------------------------------------- //array_push($arr, $keyArr) //將$keyArr添加到$arr數組的末尾,以key/棧的形式添加。 //與array_merge()、array_merge_recursive()兩函數的區別: // arrap_push()是將一個$keyArr添加到$arr裡邊,而其他兩個函數則是將多個函數串連成一個函數 echo '<br/><hr/><br/>'; //--------------------------------------------- //array_rand($arr, $num=1) //取出當前數組裡的鍵,取出幾個由$num決定,預設為1 //如果$num為1,那麼它將返回一個string //如果$num>1 && $num<count($arr) 函數返回一個數組 //否則php報錯 $arr = getArr(5, 15); printr(array_rand($arr, 4)); echo '<br/><hr/><br/>'; //--------------------------------------------- //array_reduce() //和array_map()類似,通過回呼函數,對數組裡的數值進行處理,並接受傳回值 //該函數返回一個字串。他會將數組裡所有的值進行計算,並返回計算後的值,而array_map則是對每個鍵下的值進行計算,並返回array //不是太明白,執行個體看手冊 echo '<br/><hr/><br/>'; //--------------------------------------------- //array_replace($array, $parArr,...) //用參數數組裡鍵的值替換掉$array裡相同鍵的值 //如果$array數組裡在後邊的參數數組裡沒有找到相應的鍵,那麼添加到新數組後邊 /*$arr = getArr(4, 10); $arr2 = getArr(6, 15); printr($arr); printr($arr2);*/ $base = array('citrus' => array( "orange") , 'berries' => array("blackberry", "raspberry"), ); $replacements = array('citrus' => array('pineapple'), 'berries' => array('blueberry')); printr(array_replace($base, $replacements)); echo '<br/><hr/><br/>'; //--------------------------------------------- //array_replace_recursive() 遞迴替換 //功能同array_replace()一樣。區別在於:array_replace_recursive()可以對多維陣列操作,並且不改變$array的結構,而array_replace()他最終會返回一個一維數組 $base = array('citrus' => array( "orange") , 'berries' => array("blackberry", "raspberry"), ); $replacements = array('citrus' => array('pineapple'), 'berries' => array('blueberry')); printr(array_replace_recursive($base, $replacements)); echo '<br/><hr/><br/>'; //--------------------------------------------- //array_reverse($arr) //將數組裡的鍵按相反順序排列 echo '<br/><hr/><br/>'; //--------------------------------------------- //array_search($value, $array) //在$array數組中去找值為$value的鍵名 //沒有找到則返回false //如果$array數組鴻有多個$value,那麼只返回第一個匹配的鍵 //該函數與array_keys()類似,區別在於傳回值上:array_search()只會返回一個匹配的鍵名,而array_keys()則可以返回一個由所有匹配的鍵組成的一維數組 echo '<br/><hr/><br/>'; //--------------------------------------------- //array_shift($arr) //去掉當前$arr數組裡的第一個鍵,並且對後邊的數字索引進行重新編排(但不改變原有順序),非數字索引不變。 //該函數與array_pop()類似,區別在於array_pop()去掉是最後一個,array_shift()去掉腦袋 echo '<br/><hr/><br/>'; //--------------------------------------------- //array_slice($arr, $offset, $length=0, false) 數組截取 //返回當前$arr數組裡從$offset處開始位移,共$length個元素/鍵,並組成一個新數組返回 //如果$offset或者$length為負數,那麼就是向相反方向進行位移 //感覺和substring()字串截取類似 //直接用php手冊上的執行個體了 $input = array("a", "b", "c", "d", "e"); $output = array_slice($input, 2); // returns "c", "d", and "e" $output = array_slice($input, -2, 1); // returns "d" $output = array_slice($input, 0, 3); // returns "a", "b", and "c" // note the differences in the array keys printr(array_slice($input, 2, -1)); printr(array_slice($input, 2, -1, true)); echo '<br/><hr/><br/>'; //--------------------------------------------- //array_spslice($arr, $offset, $length) //同array_slice()函數正好相反,該函數是去掉位於$offset和$length之間這些元素 unset($arr); echo '<br/><hr/><br/>'; //--------------------------------------------- //array_sum($arr) //將$arr數組裡的所有值進行求和累加,如果是非數實值型別的則嘗試進行轉換,但是大部分轉換後為0 //該函數只會影響一層數組,和array_product()類似 $arr = array( 45,56, 'a', 'b'=>getArr(1, 2), ); printr($arr); echo 'array_sum($arr)',array_sum($arr); echo '<br/><hr/><br/>'; //--------------------------------------------- //array_values($arr) //將$arr數組裡的值提取出來,組成新的數組 $arr = array( 'k1'=>45,'k2'=>56, 'k3'=>'a', 'b'=>getArr(1, 2), ); printr(array_values($arr)); echo '<br/><hr/><br/>'; //--------------------------------------------- //array_unique($arr) 對數組進行排重 //對$arr數組進行排重,將重複的值進行過濾。多個相同的值將只保留第一個 echo '<br/><hr/><br/>'; //--------------------------------------------- //array_walk($arr, callback[回呼函數], $sel_perfix='') //對當前數組下的每個鍵進送到 callback函數裡進行處理 //如果加上$sel_perfix參數,回呼函數也要三個參數來接收,否則報錯 //該函數隻影響一層 $fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple"); function test_alter(&$item1, $key, $prefix) { $item1 = "$prefix: $item1"; } printr(array_walk($fruits, 'test_print')); array_walk($fruits, 'test_alter', 'fruit'); echo '<br/><hr/><br/>'; //--------------------------------------------- //array_walk_recursive() //功能類似於array_alk();但是他會遞迴$arr的每一層數組,返回的數組不會改變原有數組的結構 echo '<br/><hr/><br/>'; //--------------------------------------------- //arsort($arr) //按照數組鍵名排序數組,可以對字母進行排序。如果排序失敗,將返回null echo '<br/><hr/><br/>'; //--------------------------------------------- //asort() //功能類似於arsort(),區別在於:asort()是對值進行排序 |