array的学习笔记

这几天公司活不多,也没啥事,就拿出手册来学学。

因为项目主要为统计,数组用的多,就只看了‘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 
posted @ 2012-05-08 20:50  cntnn11  阅读(614)  评论(0编辑  收藏  举报