PHP數組函數

來源:互聯網
上載者:User

標籤:遍曆   索引值   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數組函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.