標籤:遍曆 索引值 mon null 不同 第一個 計數 combine 回呼函數
$arr = array(1,2,3,4,5,6,"a"=>7,"b"=>8,"c"=>9,1,"haha");
返回數組所有的值,返回數組
var_dump(array_values($arr));
返回數組所有的鍵,返回數組
var_dump(array_keys($arr));
檢測數組中是否包含某個值。返回真、假
參數: 需要查詢的值,數組,true(===)/ false(==)預設
var_dump(in_array("8", $arr,true));
交換數組中的鍵和值,返回新數組
var_dump(array_flip($arr));
反轉數組。返回新數組。
參數:
① 需要反轉的數組,
② true:保留原有索引數組的下標與值的匹配(值和鍵,同時反轉)。
false:只翻轉值,鍵不翻轉。預設。
無論true/false,都不會影響關聯陣列,關聯陣列鍵、值永遠是一對
var_dump(array_reverse($arr,true));
統計數組元素個數
count($arr);
統計數組中,所有值出現的次數。返回一個新數組
新數組格式: 鍵-->原數組的值(去重後的值)
值-->原數組對應的值出現的次數。
var_dump(array_count_values($arr));
移除數組中重複的值!
var_dump(array_unique($arr));
過濾數組中的每一個值:
① 不傳回呼函數: 過濾掉所有空值(0/""/null/false/"0"/[])
② 傳回呼函數:需要給回呼函數傳遞一個參數,判斷參數是否符合要求,如果符合,return true;否則,return false;
var_dump(array_filter($arr,function($num){if($num>4){return true;}else{return false;}}));
通過回呼函數,對數組的每一個值,進行處理操作。(直接修改原數組,並返回bool類型的是否成功)
執行時,會給回呼函數傳遞兩個參數,分別是數組的value,key,然後可以在回呼函數中,對值和鍵進行處理!
但是!!!牽扯到修改值的時候,必須要傳遞地址&!!!!!
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");var_dump(array_walk($fruits, function(&$item, $key,$num){echo "{$key}-->{$item}<br>";$item .= $key;$item .= $num;},"10"));var_dump($fruits);
/將數組的每個值,交由回呼函數進行映射處理。
array_map():第一個參數,是一個回呼函數。第二個參數起,是>=1個數組。
有幾個數組,可以給回呼函數傳幾個參數,表示每個數組的一個value;
可以對value進行處理,處理完以後通過return返回,那麼新數組的對應的值就是你return回去的值。
【array_map與array_walk的異同】
相同點: 都能遍曆數組,通過回呼函數,重新處理數組的每一個值;
不同點:① walk只能傳一個數組,回呼函數接收這個數組的值和鍵;
map可以傳多個數組,回呼函數接收每個數組的值;
② walk直接修改原數組,而map不修改原數組,將新數組返回;
③ walk可以給回呼函數傳遞一個其餘參數,map只能傳數組的值;
④ 處理方式上,walk如果需要改掉原數組的值,需在回呼函數中傳遞地址,直接修改變數的值;
而map,是通過將新的值,用return返回,即可修改新數組的值。
$a = [1,2,3,4,5];$b = [1,2,3,4,5];// $arr1 = array_map(function($value){// return $value*2;// }, $a);$arr1 = array_map(function($value1,$value2){return $value1+$value2;}, $a,$b);var_dump($arr1);
sort -- 對數組排序(升序):可以傳入第二個參數,控制以何排序。第二個參數傳1,表示按照數字排序。 第二個參數傳2,表示按照字串排序,即ascii碼排序!預設會自動檢測。
rsort -- 對數組逆向排序(降序)
usort -- 使用使用者自訂的比較函數對數組中的值進行排序
usort($arr1,function($a,$b){
//return $a-$b; //升序
return $b-$a; // 降序
});
>>> 下述3個函數,常用於關聯陣列排序。用法同上
asort -- 對數組進行排序並保持索引關係
arsort -- 對數組進行逆向排序並保持索引關係
uasort -- 使用者自訂的比較函數對數組進行排序並保持索引關聯
ksort -- 對數組按照鍵名排序
krsort -- 對數組按照鍵名逆向排序
uksort -- 使用使用者自訂的比較函數對數組中的鍵名進行排序
自然排序:數字按照0-9,字母按照a-z進行排序;
下面兩個函數,都是按照自然排序,並且排序時會保留索引值關聯。
natsort -- 用“自然排序”演算法對數組排序
natcasesort -- 用“自然排序”演算法對數組不區分大小寫字母排序
array_multisort -- 對多個數組或多維陣列進行排序.
第一個參數:第一個數組(必選)
之後都是選擇性參數:SORT_DESC/SORT_ASC(升序降序)、SORT_STRING/SORT_NUMBERIC(按照數字還是字串排序)
再之後,是多個可選數組;
定序:先拍第一個數組,之後的數組,按照與第一個數組對應的關係,一列一列的移動!!!
如果對多個數組排序,需保持多個數組長度一致。否則會警示告
$arr2 = [6,9,4,7,3,8];$arr3 = [6,9,4,7,3,8];$score = [89,12,78,45,3];$name = ["zhangsan","lisi","wangermazi","liergou","niesanfen"];array_multisort($score,SORT_DESC,SORT_NUMERIC,$name);var_dump($score);var_dump($name);
array array_slice ( array array, int offset [, int length [, bool preserve_keys]] )
① 數組,必須
② 從第幾位開始截取,必選。負數表示,從右邊數第幾位;(按照數組的預設順序,包含關聯、索引數組,而不是按照下標)
③ 截取的長度,可選。預設,截到最後;
④ Boolean類是否保持索引值關聯,可選。預設,索引重新排序,傳true保持索引關聯
$arr1 = array_slice($arr,2,5,true);var_dump($arr1);
array array_splice ( array &$input , int $offset [, int $length = 0 [, mixed $replacement ]] )
傳回值: 被刪掉的數組;
參數:
① 數組的地址,會修改原數組
② 從第幾位開始刪、替換;
③ 刪除或替換的長度
④ 為空白,表示刪除操作;傳入內容,表示替換操作的新值;
//$arr = array(1,2,3,4,5,6,"a"=>7,"b"=>8,"c"=>9,1,"haha");
$arr1 = array_splice($arr,4,5,[0,0,0,0,0,0]);var_dump($arr1);var_dump($arr);
array_combine -- 建立一個數組,用一個數組的值作為其鍵名,另一個數組的值作為其值
array_combine(作為鍵的數組,作為值的數組);
兩個數組必須保持一致,否則警示告,返回false。
$arr1 = [1,2,3,4,5];$arr2 = [6,7,8,9,0];$arr3 = array_combine($arr1, $arr2);var_dump($arr3)
合并數組
array array_merge ( array array1 [, array array2 [, array ...]] )
合并多個數組,將後面的數組拼接到前面的數組後面。
如果多個數組中,出現同名的關聯索引值,則後面的會覆蓋前面的。
$arr1 = [1,2,3,"a"=>4,"10"=>5];$arr2 = [6,7,8,"a"=>9,"10"=>0];$arr3 = array_merge($arr1,$arr2);var_dump($arr3);
數組取交集
array array_intersect ( array array1, array array2 [, array ...] )
多個數組取交集,結果會保留第一個數組的,索引值關聯匹配。
$arr1 = [1,2,9,"a"=>4,5];$arr2 = [6,7,8,"a"=>9,"10"=>5];$arr3 = array_intersect($arr1, $arr2);var_dump($arr3);
數組取差集
array array_diff ( array array1, array array2 [, array ...] )
取出多個數組中,在第一個數組中包含,但是在其他數組中不包含的值。保留第一個數組的索引值關聯。
$arr1 = [1,2,9,"a"=>4,5];$arr2 = [6,7,8,"a"=>9,"10"=>5];$arr3 = array_diff($arr1, $arr2);var_dump($arr3);
array_pop:刪除數組最後一個值,並且返回這個值;
array_push: 數組的最後,放入1-多個值,返回處理之後數組的元素個數。
array_shift:刪除數組第一個值,並且返回這個值;
array_unshift:數組開頭,放入1-多個值,返回處理之後數組的元素個數。
$arr1 = [1,2,3,4,5,6,7];//echo array_pop($arr1);//echo array_push($arr1,[8,9],0);//echo array_shift($arr1);echo array_unshift($arr1,0);var_dump($arr1);
array_rand:隨機抽取數組中的1到多個鍵名!!第二個參數為空白,表示抽一個,傳入數字表示抽n個。
$arr1 = [1,2,3,4,5,6,7];var_dump(array_rand($arr1,3));
shuffle:隨機打亂數組順序,直接修改原數組。
$arr1 = [1,2,3,4,5,6,7];shuffle($arr1);var_dump($arr1);
$arr1 = array(1,2,3,4,5,6,"a"=>7,"b"=>8,"c"=>9,1,"haha","haha",3,5);
$arr2 = array();
1、有一個空數組arr2: 鍵-->原數組去重的值 值-->原數組每個值出現的次數
2、遍曆原數組arr1:並取出arr1中的每一個值;
3、檢測:新取出的這個值,是否在arr2中,有一個同名的鍵。
如果有: 說明找到了與現在新取值相重複的值。那麼,就把arr2中的這個鍵對應的值+1;
如果沒有:說明截至現在,還沒有與新取值重複的項。那麼,就在arr2中建立一個同名的鍵,讓值為1;
foreach ($arr1 as $key1 => $value1) {$isHas = false;foreach ($arr2 as $key2 => $value2) {if($key2 == $value1){$arr2[$value1] ++;$isHas = true;}}if(!$isHas) $arr2[$value1] = 1;}var_dump($arr2);
PHP數組函數