【小白筆記】PHP學習之路 (18) --數組遍歷、統計、計算

array_map()    第一個參數爲回調函數,第二個爲數組。將數組中的每個元素用回調函數處理。可以傳遞多個數組。處理過的元素返回生成新數組。

array_walk()    第二個參數爲回調函數,可傳遞多個自定義參數。對數組中的每個成員應用回調函數,成功返回真失敗返回假。回調函數傳參是鍵值-鍵名的形式。

array_walk_recursive()   功能與array_walk()相同,只不過 通過遞歸的方式對數組進行遍歷,因此可以操作二維數組。

compact()    將多個變量轉化爲數組。可直接接受變量名字符串,也可接受包含變量名字符串的數組。

extract()    將數組生成變量。返回生成的變量數。默認若生成的變量已存在,則進行覆蓋。可增加參數改變。

in_array()     判斷元素是否在數組中。返回bool值。默認不檢測類型,可增加第三個參數TRUE使其檢測類型。

array_merge() 把一個或多個數組合併爲一個數組。重名則前面的被覆蓋。

array_merge_recursive()    作用同上,在有重複項時,合併生成二維數組。

array_change_key_case()    更改鍵名的大小寫並返回,原數組不變。參數:CASE_UPPER、CASE_LOWER

range()    生成包含指定範圍的數組,可以指定步長。與python中的range()一樣。

array_count_values()    統計數組中所有值出現的次數。統計結果以數組形式返回。

array_pad()    用值將數組填補到指定長度。類似於str_pad()。第二個參數可以是負數,表示從開頭填充。

array_product()    將數組中的鍵值相乘,返回數值(int或float)。當然使用循環也可以。



示例:

array_walk()

	include("dump.php");
	$arr3 = array("張三"=>"2200","李四"=>"655","王五"=>"1233","趙六"=>"1754");
	if(array_walk($arr3,func_walk,800)){
		echo "加工資成功!<br/>";
		dump($arr3);
	}
	function func_walk(&$v,$k,$c=''){    //注意這裏爲傳址,否則無法對局部變量進行修改
		if($v<1000){               //傳進來的是 鍵值-鍵名 的形式,與平常的不同 
			$v+=$c;
		}
	}

結果:

加工資成功!
Array
(
    [張三] => 2200
    [李四] => 1455
    [王五] => 1233
    [趙六] => 1754
)

array_walk_recursive()

	$arr5 = array(
		array("uname"=>"張三","money"=>"100"),
		array("uname"=>"李四","money"=>"200"),
		array("uname"=>"王五","money"=>"300"),
		array("uname"=>"趙六","money"=>"400"),
	);
	function func(&$v,$k){
		if($k=='money' && $v<300){
			$v+=1000;
		}
	}
	array_walk_recursive($arr5,'func');
	dump($arr5);

結果:

Array
(
    [0] => Array
        (
            [uname] => 張三
            [money] => 1100
        )

    [1] => Array
        (
            [uname] => 李四
            [money] => 1200
        )

    [2] => Array
        (
            [uname] => 王五
            [money] => 300
        )

    [3] => Array
        (
            [uname] => 趙六
            [money] => 400
        )

)

由於是二維數組,此時如果任然使用array_walk()的話,操作就會失敗。

compact()

	include('dump.php');
	$name = "張三";
	$age = "27";
	$sex = "man";
	$person = compact('name','age','sex');
	$personArr = array('name','age','sex');
	dump($person);
	dump(compact($personArr));

結果:

Array
(
    [name] => 張三
    [age] => 27
    [sex] => man
)
Array
(
    [name] => 張三
    [age] => 27
    [sex] => man
)

extract()    EXTR_SKIP   EXTR_OVERWRITE   EXTR_IF_EXISTS    

                  EXTR_PREFIX_IF_EXISTS    EXTR_PREFIX_ALL

                  EXTR_PREFIX_SAME    EXTR_REFS(引用變量地址)……

	$gmail = array("weburl"=>"http://gmail.com.hk/","webname"=>"gmail","Inbox"=>"51_unread","無鍵值A","無鍵值B");
	var_dump(extract($gmail,EXTR_PREFIX_ALL,'prefix'));
	echo $prefix_weburl."<br/>".$prefix_webname."<br/>".$prefix_Inbox."<br/>";
	echo $prefix_0."<br/>".$prefix_1."<br/>";

結果:

int 5
http://gmail.com.hk/
gmail
51_unread
無鍵值A
無鍵值B

而如果前綴改爲空字符串,仍然可以使用:

	var_dump(extract($gmail,EXTR_PREFIX_ALL,''));
	echo $_0;

結果:
int 5
無鍵值A

array_merge()

	include("dump.php");
	$gmail = array("weburl_gmail"=>"http://gmail.com.hk/","webname"=>"gmail","Inbox"=>"51_unread");
	$qqmail = array("weburl_qqmail"=>"http://mail.qq.com/","webname"=>"qqmail","Inbox"=>"3_unread");
	dump(array_merge($gmail,$qqmail))

結果:

Array
(
    [weburl_gmail] => http://gmail.com.hk/
    [webname] => qqmail
    [Inbox] => 3_unread
    [weburl_qqmail] => http://mail.qq.com/
)

array_change_key_case()

	$qqmail = array("weburl_qqmail"=>"http://mail.qq.com/","webname"=>"qqmail","Inbox"=>"3_unread");
	dump(array_merge($gmail,$qqmail));
	$upper = array_change_key_case($qqmail,CASE_UPPER);
	dump($upper);
	dump(array_change_key_case($upper,CASE_LOWER));

結果:

Array
(
    [weburl_gmail] => http://gmail.com.hk/
    [webname] => qqmail
    [Inbox] => 3_unread
    [weburl_qqmail] => http://mail.qq.com/
)
Array
(
    [WEBURL_QQMAIL] => http://mail.qq.com/
    [WEBNAME] => qqmail
    [INBOX] => 3_unread
)
Array
(
    [weburl_qqmail] => http://mail.qq.com/
    [webname] => qqmail
    [inbox] => 3_unread
)

array_count_values()

	include("dump.php");
	$arr = array("a","b","c","a","b","b","d");
	dump(array_count_values($arr));

結果:

Array
(
    [a] => 2
    [b] => 3
    [c] => 1
    [d] => 1
)

str_pad()和array_pad()

	$arr = array("x","y","z");
	$str = "123";
	echo str_pad($str,20,"M",STR_PAD_BOTH);
	dump(array_pad($arr,-7,"9"));

結果:

MMMMMMMM123MMMMMMMMM
Array
(
    [0] => 9
    [1] => 9
    [2] => 9
    [3] => 9
    [4] => x
    [5] => y
    [6] => z
)

array_product()

	$arr1 = array(2,4,5,62,4,0.5);
	dump(array_product($arr1));

結果:

float 4960







以上均爲個人理解,初學php,如果有不對的地方,歡迎大家指正!微笑

發佈了38 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章