多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > 一些php數組的學習入門筆記

一些php數組的學習入門筆記

來源:程序員人生   發布時間:2014-02-16 02:38:14 閱讀次數:4205次

在php數組中有三種類型:數值數組 帶有數字 ID 鍵的數組 關聯數組 數組中的每個 ID 鍵關聯一個值 多維數組 包含一個或多個數組的數組,好了現在來看我的筆記吧.

實例代碼如下:

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

在循環里進行的是數組“寫”操作,則while比foreach快:

實例代碼如下:

  1. foreach ($array as $key => $value) {    
  2.     echo $array[$key] = $value . '...';    
  3. }      
  4. while (list($key) = each($array)) {    
  5.     $array[$key] = $array[$key] . '...';    
  6. }   
  7. foreach ($array as $key => $value) { 
  8.     echo $array[$key] = $value . '...'
  9. while (list($key) = each($array)) { 
  10.     $array[$key] = $array[$key] . '...'

總結:通常認為,foreach涉及到值復制,一定會比while慢,但實際上,如果僅僅是在循環里進行數組的讀操作,那么foreach是很快的,這是因為PHP采用的復制機制是“引用復制,寫時拷貝”,這樣看來,foreach的高效讀操作就不難理解了.

另外,既然foreach不適合處理數組寫操作,那么我們可以得出一個結論,多數情況下,類似foreach ($array as $key => $value)形式的代碼都應該被替換成while (list($key) = each($array)).

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 精品免费| 黄色wwwcom| 一区二区三区四区在线免费观看 | 一区二区三区日本视频 | 亚洲国产成人精品一区二区三区 | 亚洲视频在线观看网站 | 精品亚洲欧美高清不卡高清 | 国产区久久 | 视频1区| 手机看片高清日韩精品 | 三级欧美在线 | 欧美性猛交 | 亚洲综合视频在线 | 久久久久久久久久久大尺度免费视频 | 国产香蕉偷在线观看视频 | 免费在线亚洲视频 | 国产欧美综合在线一区二区三区 | 日韩精品一区二区三区高清 | 午夜老司机在线观看 | 日本一区二区三区四区五区 | 欧洲大片在线播放 | 亚洲高清视频一区 | 欧美一级片免费观看 | 国产成人永久免费视 | 在线观看亚洲专区 | 中文国产成人精品少久久 | 亚洲国产精品视频 | 68久久久久欧美精品观看 | 欧美一区二区三区在线可观看 | 日韩中文视频 | 国产女人视频免费观看 | 一级毛片在线免费观看 | 性色综合| 日本欧美一级二级三级不卡 | 亚洲第一视频网 | 久久久久久岛国免费网站 | 精品国产91久久久久久久 | 黑人巨大xxxx | 精品久久久久久亚洲 | 亚洲第一成人在线 | 噜噜噜噜私人影院老湿在线观看 |