array的學習筆記

原文地址: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 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章