原文地址:http://www.cnblogs.com/cntnn11/archive/2012/05/08/2490691.html 其實原創者還是我
這幾天公司活不多,也沒啥事,就拿出手冊來學學。
因爲項目主要爲統計,數組用的多,就只看了‘array_’開頭的的那些,邊看邊筆記。
技術不精,要有錯誤,還請指出,我會改正。
2 header('Content-Type: text/html; charset=utf-8'); 3 echo '<pre>'; 4 function var_array($array) 5 { 6 echo '<pre>'; 7 var_dump($array); 8 echo '</pre>'; 9 } 10 function printr($array) 11 { 12 echo '<pre>'; 13 print_r($array); 14 echo '</pre>'; 15 } 16 function getArr($sNum, $eNum=1, $step=1) 17 { 18 $arr = range($sNum, $eNum, $step); 19 $reArr = array(); 20 foreach($arr as $v) 21 { 22 $reArr[$v] = rand(0,10); 23 } 24 unset($arr); 25 return $reArr; 26 } 27 28 /** 29 * array數組練習 30 */ 31 //--------------------------------------------- 32 //array_change_key_case() 改變數組索引的大小寫字母,由最後一個參數決定:CASE_UPPER(轉化爲大寫),CASE_LOWER(默認 轉化爲小寫) 33 $expArr = array( 34 'fiRsT' => '1', 35 'sEcoNd' => '2', 36 'ThIrd' => array( 37 'HuiMa' => '3', 38 'nengZhuaNma' => '5', 39 ) 40 ); 41 printr(array_change_key_case($expArr));//全轉化爲小寫 42 43 printr(array_change_key_case($expArr['ThIrd'], CASE_UPPER));//全轉化爲大寫 只對$expArr數組裏的某個index鍵轉化 44 45 //總結:該函數隻影響數組的一層。 並且不會對原數組產生影響 46 47 echo '<br/><hr/><br/>'; 48 //--------------------------------------------- 49 //array_chunk($array, $size, false) 50 //將一個數組分割成一個多維數組,size決定這個數組每$size個成爲一個多維數組, true/false決定新數組的鍵值是否沿用原數組的鍵 51 $expArr = array('4','2','6','d','2'); 52 printr(array_chunk($expArr, 3)); 53 //總結:該函數隻影響數組的一層。 並且不會對原數組產生影響 54 55 echo '<br/><hr/><br/>'; 56 //--------------------------------------------- 57 //array_combine($keyArr, $valArr) 58 //將兩個數組組合成一個數組,$keyArr做爲鍵,$valArr做爲值 59 $expKey = array('g', 'd', 't'); 60 $expVal = array('5', '8', '7'); 61 62 printr(array_combine($expKey, $expVal)); 63 //該函數同樣隻影響數組的一層,並且返回一個新數組 64 65 66 echo '<br/><hr/><br/>'; 67 //--------------------------------------------- 68 //array_count_values($array) 69 //統計$array數組中每個value出現的次數,並以他個value做爲新數組的鍵,出現次數做爲value 70 $array = array('v1'=>'265', 'v2'=>'352', 'v3'=>'265', 'v4'=>'349', 'v5'=>'265'); 71 printr(array_count_values($array)); 72 73 //總結:該函數只能用於統計值爲 string和integer類型的value,其他類型會發warning! 74 75 76 echo '<br/><hr/><br/>'; 77 //--------------------------------------------- 78 //array_diff($array1, $array2...) 79 //以$array1爲基礎數組,他的值不出現在其他任何參數數組裏的值組成一個新數組 80 $arr1 = array('v4'=>458, 'gren', 'b5', 'a5'); 81 $arr2 = array('v4'=>598, 'red', 'a5', 'c4'); 82 printr(array_diff($arr1, $arr2)); 83 84 //總結:拿一個數組到一堆數組中找出這個數組中沒有的值,統計、數據對比應該會用到 85 //array_intersect($array, $parArr, ....) 86 //該函數同array_diff在功能上一樣,只是array_intersect()返回的是共有的數據,array_diff則是隻存在於$array中的數據 87 // 88 89 echo '<br/><hr/><br/>'; 90 //--------------------------------------------- 91 //array_diff_assoc($array1, $array2...) 92 //同 array_diff()函數,但是這個也會拿key進行對比 93 // 94 95 96 echo '<br/><hr/><br/>'; 97 //--------------------------------------------- 98 //array_diff_key 99 //同array_diff()函數 100 //只是這個只拿$array1的key去與其他參數數組進行查找 101 // 102 103 104 echo '<br/><hr/><br/>'; 105 //--------------------------------------------- 106 //array_diff_uassoc($arr1, $parArr...., 回調函數) 107 //功能同array_diff(),但是需要用戶定義一個回調函數 108 //未明白該函數的作用 109 // 110 111 112 echo '<br/><hr/><br/>'; 113 //--------------------------------------------- 114 //array_diff_ukey($arr1, $parArr...., 回調函數) 115 //功能同array_diff_key(),只不過和array_diff_uassoc一樣,需要一個回調函數 116 // 117 // 118 119 echo '<br/><hr/><br/>'; 120 //--------------------------------------------- 121 //array_fill($startInt, $numInt, $value) 122 //把$value填充到一個新數組,新數組的索引起始位置開始由$startInt決定,$numInt則控制這個數組生成多少個索引。 123 //tip:除了$value,$startInt,$numInt必須爲數字,否則報錯 124 printr(array_fill(2, 5, 'value')); 125 //總結:還沒想到幹啥用 126 127 128 echo '<br/><hr/><br/>'; 129 //--------------------------------------------- 130 //array_fill_keys($arrKeys, $value); 131 //功能同array_fill()函數。只不過這裏用$arrKeys【一個數組的值】來做爲新數組的鍵 132 $arrKeys = array('45', 'd', 'b', 'c'); 133 printr(array_fill_keys($arrKeys, 'value')); 134 135 136 echo '<br/><hr/><br/>'; 137 //--------------------------------------------- 138 //array_filter($arr, callBack回調函數) 139 //過濾函數,通過對$arr數組的值的判斷,如果 callBack回調函數 返回true,則將當前鍵以及值添加到新的數組裏 140 //TIP:回調函數可以寫個規則,來過濾掉裏邊不符合規則的數組鍵 141 function cb($val) 142 { 143 return $val%2 == 0; 144 } 145 $array = array('k1'=>3, 'k2'=>5,'k4'=>54654, 'k5'=>8794, 8945, 32549564); 146 printr($array, 'cb'); 147 //tip:回調函數名建議用引號引起來 148 149 //總結:該方法可以做成一個數據過濾的集成 150 unset($array); 151 152 153 echo '<br/><hr/><br/>'; 154 //--------------------------------------------- 155 //array_flip($array) 156 //將數組中key和value的關係轉換。只支持string和integr類型的鍵,其他類型將會發出警告,並且有問題的鍵值不轉換。在生成的新的數組,如果鍵相同,他會不停的替換掉現有鍵的值 157 $arr = array('k1'=>'v1', 'k2'=>'v2', 'k3'=>'v4', 'k4'=>'v4', 'k5'=>'v5'); 158 printr(array_flip($arr)); 159 unset($arr); 160 161 162 echo '<br/><hr/><br/>'; 163 //--------------------------------------------- 164 //array_key_exists($key, $array) 165 //判斷一個鍵是否存在於當前數組中,返回bool。也可用來判斷對象 166 $array = array('cb' => 234, 'dv'=>45, 'one'=>897); 167 if(array_key_exists('one', $array)) 168 echo '存在這個數組中'; 169 else 170 echo '不存在'; 171 172 173 echo '<br/><hr/><br/>'; 174 //--------------------------------------------- 175 //array_keys($array, $selSearch_value) 176 //返回數組中的鍵名並組成一個新數組,如果指定了$selSearch_value值,那麼將返回數組裏等於$selSearch_value的鍵名 177 $array = getArr(4, 10); 178 printr(array_keys($array)); 179 printr(array_keys($array, '5'));//帶值的搜索 180 181 unset($array); 182 //總結:這個也可用於數據統計,數據對比驗證 183 184 185 186 echo '<br/><hr/><br/>'; 187 //--------------------------------------------- 188 echo 'array_map:'; 189 //array_map('callBack', $array,...) 190 //把傳入的函數,返回經callback回調函數的返回值 191 //回調函數也可以返回一個數組。並且,回調函數只接受一個數組裏的值傳入 192 function mapCb($n) 193 { 194 return $n*$n*$n; 195 } 196 $array = getArr(4, 15); 197 printr(array_map('mapCb', $array)); 198 199 200 echo '<br/><hr/><br/>'; 201 //--------------------------------------------- 202 //array_merge($array,$array2...) 203 //將多個數組組成一個數組,並對數字索引進行重新編寫。 204 $arr1 = getArr(1, 5); 205 $arr2 = getArr(5, 10); 206 printr(array_merge($arr1, $arr2)); 207 208 //總結:將多個數組組成一個新數組。 209 210 211 echo '<br/><hr/><br/>'; 212 //--------------------------------------------- 213 //array_merge_recursive($arr1, $arr2....) 214 //功能同上。但函數會將鍵名相同的值組成一個新數組,而不是替換掉 215 //但如果要用,根據實際情況使用 216 217 218 echo '<br/><hr/><br/>'; 219 //--------------------------------------------- 220 //array_multisort() 221 //多維數組排序,目前只實現了二維數組排序。三維估計不能排 222 //該函數會直接改變員數組順序 223 224 225 echo '<br/><hr/><br/>'; 226 //--------------------------------------------- 227 //array_pad($arr, $size, $value) 228 //對數組進行填充,如果當前$arr的長度小於$size,那麼,就用$value來填充$arr數組,直至$arr的長度與$size相等 229 //如果$arr的長度大於或等於$size,那麼該函數將不會對$arr進行填充。 $size小於0則填充在$arr的左邊,大於0則右邊 230 231 232 echo '<br/><hr/><br/>'; 233 //--------------------------------------------- 234 //array_pop($array) 235 //去掉數組的最後一個鍵。 236 237 238 echo '<br/><hr/><br/>'; 239 //--------------------------------------------- 240 //array_product($arr) 241 //返回一個數組中所有數值的乘積。 242 //tip:該函數無法處理非數值類型的數據。如果傳入數組裏包含‘a、b之類字符串’,那麼php會報錯 243 $arr = array(4,5,5); 244 echo array_product($arr); 245 246 247 echo '<br/><hr/><br/>'; 248 //--------------------------------------------- 249 //array_push($arr, $keyArr) 250 //將$keyArr添加到$arr數組的末尾,以key/棧的形式添加。 251 //與array_merge()、array_merge_recursive()兩函數的區別: 252 // arrap_push()是將一個$keyArr添加到$arr裏邊,而其他兩個函數則是將多個函數連接成一個函數 253 254 255 echo '<br/><hr/><br/>'; 256 //--------------------------------------------- 257 //array_rand($arr, $num=1) 258 //取出當前數組裏的鍵,取出幾個由$num決定,默認爲1 259 //如果$num爲1,那麼它將返回一個string 260 //如果$num>1 && $num<count($arr) 函數返回一個數組 261 //否則php報錯 262 $arr = getArr(5, 15); 263 printr(array_rand($arr, 4)); 264 265 266 echo '<br/><hr/><br/>'; 267 //--------------------------------------------- 268 //array_reduce() 269 //和array_map()類似,通過回調函數,對數組裏的數值進行處理,並接受返回值 270 //該函數返回一個字符串。他會將數組裏所有的值進行計算,並返回計算後的值,而array_map則是對每個鍵下的值進行計算,並返回array 271 //不是太明白,實例看手冊 272 273 274 echo '<br/><hr/><br/>'; 275 //--------------------------------------------- 276 //array_replace($array, $parArr,...) 277 //用參數數組裏鍵的值替換掉$array裏相同鍵的值 278 //如果$array數組裏在後邊的參數數組裏沒有找到相應的鍵,那麼添加到新數組後邊 279 /*$arr = getArr(4, 10); 280 $arr2 = getArr(6, 15); 281 printr($arr); 282 printr($arr2);*/ 283 $base = array('citrus' => array( "orange") , 'berries' => array("blackberry", "raspberry"), ); 284 $replacements = array('citrus' => array('pineapple'), 'berries' => array('blueberry')); 285 printr(array_replace($base, $replacements)); 286 287 288 echo '<br/><hr/><br/>'; 289 //--------------------------------------------- 290 //array_replace_recursive() 遞歸替換 291 //功能同array_replace()一樣。區別在於:array_replace_recursive()可以對多維數組操作,並且不改變$array的結構,而array_replace()他最終會返回一個一維數組 292 $base = array('citrus' => array( "orange") , 'berries' => array("blackberry", "raspberry"), ); 293 $replacements = array('citrus' => array('pineapple'), 'berries' => array('blueberry')); 294 printr(array_replace_recursive($base, $replacements)); 295 296 297 echo '<br/><hr/><br/>'; 298 //--------------------------------------------- 299 //array_reverse($arr) 300 //將數組裏的鍵按相反順序排列 301 302 303 echo '<br/><hr/><br/>'; 304 //--------------------------------------------- 305 //array_search($value, $array) 306 //在$array數組中去找值爲$value的鍵名 307 //沒有找到則返回false 308 //如果$array數組鴻有多個$value,那麼只返回第一個匹配的鍵 309 //該函數與array_keys()類似,區別在於返回值上:array_search()只會返回一個匹配的鍵名,而array_keys()則可以返回一個由所有匹配的鍵組成的一維數組 310 311 312 echo '<br/><hr/><br/>'; 313 //--------------------------------------------- 314 //array_shift($arr) 315 //去掉當前$arr數組裏的第一個鍵,並且對後邊的數字索引進行重新編排(但不改變原有順序),非數字索引不變。 316 //該函數與array_pop()類似,區別在於array_pop()去掉是最後一個,array_shift()去掉腦袋 317 318 319 echo '<br/><hr/><br/>'; 320 //--------------------------------------------- 321 //array_slice($arr, $offset, $length=0, false) 數組截取 322 //返回當前$arr數組裏從$offset處開始偏移,共$length個元素/鍵,並組成一個新數組返回 323 //如果$offset或者$length爲負數,那麼就是向相反方向進行偏移 324 //感覺和substring()字符串截取類似 325 //直接用php手冊上的實例了 326 $input = array("a", "b", "c", "d", "e"); 327 328 $output = array_slice($input, 2); // returns "c", "d", and "e" 329 $output = array_slice($input, -2, 1); // returns "d" 330 $output = array_slice($input, 0, 3); // returns "a", "b", and "c" 331 // note the differences in the array keys 332 printr(array_slice($input, 2, -1)); 333 printr(array_slice($input, 2, -1, true)); 334 335 336 echo '<br/><hr/><br/>'; 337 //--------------------------------------------- 338 //array_spslice($arr, $offset, $length) 339 //同array_slice()函數正好相反,該函數是去掉位於$offset和$length之間這些元素 340 341 unset($arr); 342 echo '<br/><hr/><br/>'; 343 //--------------------------------------------- 344 //array_sum($arr) 345 //將$arr數組裏的所有值進行求和累加,如果是非數值類型的則嘗試進行轉換,但是大部分轉換後爲0 346 //該函數只會影響一層數組,和array_product()類似 347 $arr = array( 348 45,56, 'a', 'b'=>getArr(1, 2), 349 ); 350 printr($arr); 351 echo 'array_sum($arr)',array_sum($arr); 352 353 354 echo '<br/><hr/><br/>'; 355 //--------------------------------------------- 356 //array_values($arr) 357 //將$arr數組裏的值提取出來,組成新的數組 358 $arr = array( 359 'k1'=>45,'k2'=>56, 'k3'=>'a', 'b'=>getArr(1, 2), 360 ); 361 printr(array_values($arr)); 362 363 364 echo '<br/><hr/><br/>'; 365 //--------------------------------------------- 366 //array_unique($arr) 對數組進行排重 367 //對$arr數組進行排重,將重複的值進行過濾。多個相同的值將只保留第一個 368 369 370 echo '<br/><hr/><br/>'; 371 //--------------------------------------------- 372 //array_walk($arr, callback[回調函數], $sel_perfix='') 373 //對當前數組下的每個鍵進送到 callback函數裏進行處理 374 //如果加上$sel_perfix參數,回調函數也要三個參數來接收,否則報錯 375 //該函數隻影響一層 376 $fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple"); 377 function test_alter(&$item1, $key, $prefix) 378 { 379 $item1 = "$prefix: $item1"; 380 } 381 printr(array_walk($fruits, 'test_print')); 382 array_walk($fruits, 'test_alter', 'fruit'); 383 384 385 echo '<br/><hr/><br/>'; 386 //--------------------------------------------- 387 //array_walk_recursive() 388 //功能類似於array_alk();但是他會遞歸$arr的每一層數組,返回的數組不會改變原有數組的結構 389 390 391 echo '<br/><hr/><br/>'; 392 //--------------------------------------------- 393 //arsort($arr) 394 //按照數組鍵名排序數組,可以對字母進行排序。如果排序失敗,將返回null 395 396 397 echo '<br/><hr/><br/>'; 398 //--------------------------------------------- 399 //asort() 400 //功能類似於arsort(),區別在於:asort()是對值進行排序 401 402 403 404 405 406 407 408 409 410