最新公告
  • 欢迎您光临波比源码,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • 一些php数组的学习入门笔记

    在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)).

    波比源码 – 精品源码模版分享 | www.bobi11.com
    1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
    2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
    3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
    4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
    5. 如有链接无法下载、失效或广告,请联系管理员处理!
    6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
    7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

    波比源码 » 一些php数组的学习入门笔记

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    波比源码
    一个高级程序员模板开发平台
    升级波友尊享更多特权立即升级