本篇主要是 使用回呼函數處理數組,2種方式:
函數調用,函數結構一目瞭然
匿名函數 ,即時使用,安全性高
下面示範幾個函數的使用:主要是瞭解回呼函數的使用:
count() 計算數組中的單元數目或對象中的屬性個數
array_count_values() 統計數組中所有的值出現的次數
array_unique() 移除數組中重複的值
array_filter() 用回呼函數過濾數組中的單元
array_walk() 使用使用者自訂函數對數組中的每個元素做回調處理
array_map() 為數組的每個元素應用回呼函數
通過array_filter()和array_walk()重點瞭解一下回呼函數的使用,尤其是安全性較高的匿名函數
<?php /** * 數組的相關處理函數: * http://www.php.cn/ * * 下面示範幾個函數的使用:主要是瞭解回呼函數的使用 * count() 計算數組中的單元數目或對象中的屬性個數 * array_count_values() 統計數組中所有的值出現的次數 * array_unique() 移除數組中重複的值 * array_filter() 用回呼函數過濾數組中的單元 * array_walk() 使用使用者自訂函數對數組中的每個元素做回調處理 * array_map() 為數組的每個元素應用回呼函數 * 通過array_filter()和array_walk()重點瞭解一下回呼函數的使用,尤其是安全性較高的匿名函數 */ $lamp = array("os"=>"Linux", "webserver"=>"Apache", "db"=>"MySQL", "language"=>"PHP"); echo '---------- print_r() ----------<br>'; print_r($lamp); // 列印結果:Array ( [os] => Linux [webserver] => Apache [db] => MySQL [language] => PHP ) echo '<br>'; /** * count() 計算數組中的單元數目或對象中的屬性個數 */ echo '---------- count() 字串 ----------<br>'; $str = "hello world"; $str2 = ""; var_dump(count($str)); // 列印結果:int(1) echo '<br>'; var_dump(count($str2)); // 列印結果:int(1) echo '<br>'; echo '---------- count() 數組 ----------<br>'; echo count($lamp); // 列印結果:4 echo '<br>'; echo '---------- count() 多維陣列 ----------<br>'; $web = array( "lamp"=>array("os"=>"Linux", "webserver"=>"Apache", "db"=>"MySQL", "language"=>"PHP"), "lamp2"=>array("os"=>"Linux", "webserver"=>"Apache", "db"=>"MySQL", "language"=>"PHP"), "lamp3"=>array("os"=>"Linux", "webserver"=>"Apache", "db"=>"MySQL", "language"=>"PHP") ); echo count($web); // 列印結果:3 echo '<br>'; echo count($web,1); // 列印結果:15 , 數組有3個元素,子數組有12個元素 echo '<br>'; /** * array_count_values() 統計數組中所有的值出現的次數 */ echo '---------- array_count_values() ----------<br>'; $lamp4 = array("os"=>"Linux", "webserver"=>"Apache", "db"=>"MySQL", "db2"=>"MySQL", "language"=>"PHP"); echo print_r(array_count_values($lamp4)); // 列印結果:Array ( [Linux] => 1 [Apache] => 1 [MySQL] => 2 [PHP] => 1 ) 1 echo '<br>'; /** * array_unique() 移除數組中重複的值 * 第一次出現的value保留其key,其他的移除 */ echo '---------- array_unique() ----------<br>'; $lamp5 = array("os"=>"Linux", "webserver"=>"Apache", "db"=>"MySQL", "db2"=>"MySQL", "language"=>"PHP"); echo print_r(array_unique($lamp5)); // 列印結果:Array ( [os] => Linux [webserver] => Apache [db] => MySQL [language] => PHP ) 1 echo '<br>'; /** * array_filter() 用回呼函數過濾數組中的單元 */ echo '---------- array_filter() ----------<br>'; $arr = array(1,2,false,-3,null,-2,3,4,"",5,-5,-4,-1); echo '<pre>'; var_dump($arr); /*列印結果: array(13) { [0]=> int(1) [1]=> int(2) [2]=> bool(false) [3]=> int(-3) [4]=> NULL [5]=> int(-2) [6]=> int(3) [7]=> int(4) [8]=> string(0) "" [9]=> int(5) [10]=> int(-5) [11]=> int(-4) [12]=> int(-1) } */ echo '---------- array_filter() 不傳參調用----------<br>'; var_dump(array_filter($arr)); /*列印結果:結果中,false、null、"",被過濾掉了 array(10) { [0]=> int(1) [1]=> int(2) [3]=> int(-3) [5]=> int(-2) [6]=> int(3) [7]=> int(4) [9]=> int(5) [10]=> int(-5) [11]=> int(-4) [12]=> int(-1) } */ echo '---------- array_filter() 通過自訂函數過濾 ----------<br>'; function myfun($value){ // 自己寫的函數,大於等於0返回真,否則返回假 if ($value>=0){ return true; }else{ return false; } } var_dump(array_filter($arr,"myfun")); /*列印結果:結果中,小於0的,被過濾掉了 array(8) { [0]=> int(1) [1]=> int(2) [2]=> bool(false) [4]=> NULL [6]=> int(3) [7]=> int(4) [8]=> string(0) "" [9]=> int(5) } */ echo '---------- array_filter() 通過匿名函數過濾 ----------<br>'; echo '---------- 當其他地方不需要調用這個函數,推薦使用匿名函數,方便且安全 ----------<br>'; var_dump(array_filter($arr, function ($value){ return !($value%2==0); })); /*列印結果:結果中,2的倍數,被過濾掉了 array(6) { [0]=> int(1) [3]=> int(-3) [6]=> int(3) [9]=> int(5) [10]=> int(-5) [12]=> int(-1) } */ /** * array_walk() 使用使用者自訂函數對數組中的每個元素做回調處理 */ echo '---------- array_walk() ----------<br>'; $arr2 = array(1,2,3,4,5); print_r($arr2); echo '<br>'; /*列印結果:數組原型列印 Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 ) */ echo '---------- array_walk() 沒有引用 $value 調用函數 ----------<br>'; function myfun2($value){ // 沒有引用 $value $value=$value*$value; } array_walk($arr2,"myfun2"); // 沒有引用 $value print_r($arr2); echo '<br>'; /*列印結果: Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 ) */ echo '---------- array_walk() 有引用 &$value 調用函數 ----------<br>'; function myfun3(&$value){ // 引用 &$value $value=$value*$value; } array_walk($arr2,"myfun3"); // 引用 &$value print_r($arr2); echo '<br>'; /*列印結果: Array ( [0] => 1 [1] => 4 [2] => 9 [3] => 16 [4] => 25 ) */ echo '---------- array_walk() 同時處理key和value ----------<br>'; $arr3 = array("one"=>1, "two"=>2, "three"=>3, "four"=>4, "five"=>5); print_r($arr3); echo '<br>'; /*列印結果:數組原型列印 Array ( [one] => 1 [two] => 2 [three] => 3 [four] => 4 [five] => 5 ) */ echo '---------- array_walk() 調用函數有2個參數 即,同時對key和value操作 ----------<br>'; function myfun4(&$value,$key){ $value=$value*$value; echo $key."~~~~~".$value."<br>"; } array_walk($arr3,"myfun4"); /*列印結果: one~~~~~1 two~~~~~4 three~~~~~9 four~~~~~16 five~~~~~25 */ echo '---------- array_walk() 調用函數有2個參數 即,同時對key和value操作 匿名函數----------<br>'; array_walk($arr3,function ($value, $key){ echo $key."~~~~~".$value."<br>"; }); /*列印結果: one~~~~~1 two~~~~~4 three~~~~~9 four~~~~~16 five~~~~~25 */ /** * array_map() 為數組的每個元素應用回呼函數 */ echo '---------- array_map() ----------<br>'; $arr4 = array(1,2,3,4,5); $arr5 = array(6,7,8,9,0); print_r($arr4); echo '<br>'; /*列印結果:數組原型列印 Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 ) */ echo '---------- array_map() 1 ----------<br>'; function myfun5($value){ return $value*$value*$value; } $arr4new = array_map("myfun5", $arr4); print_r($arr4new); echo '<br>'; /*列印結果: Array ( [0] => 1 [1] => 8 [2] => 27 [3] => 64 [4] => 125 ) */ echo '---------- array_map() 2 注意return ----------<br>'; function myfun6($value){ echo $value*$value*$value."<br>"; } $arr4new = array_map("myfun6", $arr4); print_r($arr4new); echo '<br>'; /*列印結果:數組裡的value沒了,因為在函數裡沒有return,所以,使用array_map()注意return 1 8 27 64 125 Array ( [0] => [1] => [2] => [3] => [4] => ) */ echo '---------- array_map() 3 ----------<br>'; function myfun7($value, $value2){ echo "$value~~~~~$value2<br>"; return 1; } $arr45new = array_map("myfun7", $arr4,$arr5); print_r($arr45new); echo '<br>'; /*列印結果: 1~~~~~6 2~~~~~7 3~~~~~8 4~~~~~9 5~~~~~0 Array ( [0] => 1 [1] => 1 [2] => 1 [3] => 1 [4] => 1 ) */ echo '---------- array_map() 4 ----------<br>'; $arr45new = array_map(null, $arr4,$arr5); print_r($arr45new); echo '<br>'; /*列印結果: Array ( [0] => Array ( [0] => 1 [1] => 6 ) [1] => Array ( [0] => 2 [1] => 7 ) [2] => Array ( [0] => 3 [1] => 8 ) [3] => Array ( [0] => 4 [1] => 9 ) [4] => Array ( [0] => 5 [1] => 0 ) ) */ echo '---------- array_map() 5 ----------<br>'; $arr6 = array(1,2,3,4,5); $arr7 = array("one","two","three"); $arr8 = array("aa","bb","cc","dd"); $arr678new = array_map(null,$arr6,$arr7,$arr8); print_r($arr678new); echo '<br>'; /*列印結果: Array ( [0] => Array ( [0] => 1 [1] => one [2] => aa ) [1] => Array ( [0] => 2 [1] => two [2] => bb ) [2] => Array ( [0] => 3 [1] => three [2] => cc ) [3] => Array ( [0] => 4 [1] => [2] => dd ) [4] => Array ( [0] => 5 [1] => [2] => ) ) */
以上就是Android程式員學PHP開發(24)-數組操作相關函數(2)回呼函數篇-PhpStorm的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!