1. 程式人生 > >PHP基礎知識6【系統內置函數--數組】

PHP基礎知識6【系統內置函數--數組】

onu a-z map() keys 回調 map ade 區分 function

數組的相關處理函數
一.數組鍵/值操作有關的函數
1.array_values() 無論是關聯的還是索引的返回的都是索引數組

技術分享圖片
 1 <?php
 2 $lamp=array("os"=>"Linux","webserver"=>"Apache","db"=>"Mysql","language"=>"php");
 3 
 4 $arr=array_values($lamp);
 5 
 6 list($os,$wb,$db,$lang)=$arr;
 7 
 8 echo $os."<br>";
 9 echo $wb."<br>";
10 echo $db."<br>";
11 echo $lang."<br>";
12 
13 echo "<pre>";
14 print_r($arr);
15 echo "<pre>";
16 ?>
技術分享圖片

2.array_keys(array,value) 返回鍵名
array 必需。規定輸入的數組。
value 可選。指定值的索引(鍵)。

技術分享圖片
1 <?php
2 $lamp=array("os"=>"Linux","webserver"=>"Apache","db"=>"Mysql","language"=>"php");
3 
4 $arr=array_keys($lamp,);
5 
6 echo "<pre>";
7 print_r($arr);
8 echo "<pre>";
9 ?>
技術分享圖片

3.in_array(value,array,type) 函數在數組中搜索給定的值
value 必需。規定要在數組搜索的值。
array 必需。規定要搜索的數組。
type 可選。如果設置該參數為 true,則檢查搜索的數據與數組的值的類型是否相同。

技術分享圖片
<?php
$lamp=array("os"=>"Linux","webserver"=>"Apache","db"=>"Mysql","language"=>"php",array("a","b"));

if(in_array(array("a","b"),$lamp)){
    echo "存在!";
}else{
    echo "不存在!";
}
?>
技術分享圖片

4.array_key_exists(key,array) 函數判斷某個數組中是否存在指定的 key,如果該 key 存在,則返回 true,否則返回 false。
key 必需。規定鍵名。
array 必需。規定輸入的數組。

技術分享圖片
<?php
$lamp=array("os"=>"Linux","webserver"=>"Apache","db"=>"Mysql","language"=>"php",array("a","b"));

if(array_key_exists("os",$lamp)){
    echo "存在!";
}else{
    echo "不存在!";
}
?>
技術分享圖片


5.array_flip(array) 交換數組中的鍵和值. 函數返回一個反轉後的數組,如果同一值出現了多次,則最後一個鍵名將作為它的值,所有其他的鍵名都將丟失。

技術分享圖片
<?php
$lamp=array("os"=>"Linux","webserver"=>"Apache","db"=>"Mysql","language"=>"php",10=>"Linux");

$arr=array_flip($lamp);

echo "<pre>";
print_r($arr);
echo "<pre>";
?>
技術分享圖片

6.array_reverse(array,preserve) 將原數組中的元素順序翻轉,創建新的數組並返回。
preserve 可選。規定是否保留原始數組的鍵名。可能的值:true(是) 和 false。

技術分享圖片
<?php
$lamp=array("os"=>"Linux","webserver"=>"Apache","db"=>"Mysql","language"=>"php");

$arr=array_reverse($lamp);

echo "<pre>";
print_r($arr);
echo "<pre>";
?>
技術分享圖片

二.統計數組元素的個數和唯一性
1.count(array,mode) sizeof(array,mode); 統計數組的長度
mode 可選。規定函數的模式。可能的值:
0 - 默認。不檢測多維數組(數組中的數組)。
1 - 檢測多維數組。

技術分享圖片
<?php
$arr=array("id"=>1,"name"=>"zhangsan","age"=>20,"sex"=>"nan",array(1,2,3,4,5,6));

echo "conut()--->".count($arr,1);
echo "<br>";
echo "sizeof()--->".sizeof($arr,1);
?>
技術分享圖片

2.array_count_values() 用於統計數組中所有值出現的次數。
本函數返回一個數組,其元素的鍵名是原數組的值,鍵值是該值在原數組中出現的次數。

技術分享圖片
<?php
$arr=array("id1"=>1,"id2"=>1,"name"=>"zhangsan","age"=>20,"sex"=>"nan");

$a=array_count_values($arr);

echo "<pre>";
print_r($a);
echo "<pre>";
?>
技術分享圖片

3.array_unique 刪除數組中重復的值,並返回結果數組。被返回的數組將保持第一個數組元素的鍵類型

<?php
$a=array("a"=>"Cat","b"=>"Dog","c"=>"Cat");

print_r(array_unique($a));
?>

三.使用回調函數處理數組的函數
1.array_filter(array,function) 用回調函數過濾數組中的元素。如果自定義過濾函數返回 true,則被操作的數組的當前值就會被包含在返回的結果數組中, 並將結果組成一個新的數組。如果原數組是一個關聯數組,鍵名保持不變。
function 必需。自定義函數的名稱。

技術分享圖片
<?php
$arr=array(1,-2,3,-4,5,-6,7,8,9,10,11,12);

$a=array_filter($arr,"myfun");

function myfun($n){
    if($n>0){
        return true;
    }else{
        return false;
    }
}

echo "<pre>";
print_r($a);
echo "<pre>";
?>
技術分享圖片

2.array_walk(array,function,userdata...) 對數組中的每個成員應用用戶函數。如果成功則返回 TRUE,否則返回 FALSE。
function 必需。用戶自定義函數的名稱。
serdata 可選。用戶輸入的值,可作為回調函數的參數。

技術分享圖片
<?php
$lamp=array("os"=>"Linux","wb"=>"Apache","db"=>"MySql","la"=>"php");

array_walk($lamp,"myfun");

function myfun($value,$key){
    echo $key."--->".$value."<br>";
}
?>
技術分享圖片

3.array_map(function,array1,array2,array3...) 將回調函數作用到給定數組的單元上。回調函數接受的參數數目應該和傳遞給 array_map() 函數的數組數目一致。

技術分享圖片
<?php
$lamp=array("os"=>"Linux","wb"=>"Apache","db"=>"MySql","la"=>"php");

$arr=array_map("myfun",$lamp);

function myfun($n){
    return $n."==";
}
echo "<pre>";
print_r($arr);
echo "<pre>";
?>
技術分享圖片

四.數組的排序函數
sort()
rsort()
usort()
asort()
arsort()
uasort()
ksort()
krsort()
uksort()
hatsort()
natcasesort()
array_multisort()

1.簡單的數組排序
sort(array,sorttype) 函數按升序對給定數組的值排序。鍵名改變
sorttype 可選。規定如何排列數組的值。可能的值:
SORT_REGULAR - 默認。以它們原來的類型進行處理(不改變類型)。
SORT_NUMERIC - 把值作為數字來處理
SORT_STRING - 把值作為字符串來處理
SORT_LOCALE_STRING - 把值作為字符串來處理,基於本地設置*。
rsort(array,sorttype)函數對數組逆向排序,鍵名改變

技術分享圖片
<?php
$data=array(1,3,2,8,4,7);

sort($data);

echo "<pre>";
print_r($data);
echo "<pre>";

$data1=array("a"=>"cfr","c"=>"brtd","b"=>"adefex");

rsort($data1);

echo "<pre>";
print_r($data1);
echo "<pre>";
?>
技術分享圖片

2.根據鍵名對數組排序
ksort(array,sorttype)函數對數組按照鍵名排序,為數組值保留原來的鍵
krsort(array,sorttype)函數對數組按照鍵名逆向排序,為數組值保留原來的鍵

技術分享圖片
<?php
$arr=array("a"=>"bder","c"=>"adef","b"=>"cderf");

ksort($arr);

echo "<pre>";
print_r($arr);
echo "<pre>";

krsort($arr);

echo "<pre>";
print_r($arr);
echo "<pre>";
?>
技術分享圖片

3.根據元素的值對數組進行排序
asort(array,sorttype)函數對數組進行排序並保持索引關系,鍵名不變
arsort(array,sorttype)函數對數組進行逆向排序並保持索引關系,鍵名不變

技術分享圖片
<?php
$my_array = array("a"=>"Dog","b"=>"Cat","c" =>"Horse");

asort($my_array);
echo "<pre>";
print_r($my_array);
echo "<pre>";

arsort($my_array);
echo "<pre>";
print_r($my_array);
echo "<pre>";
?> 
技術分享圖片

4.根據“自然數排序”法讀數組排序
natsort(array)函數用“自然排序”算法對數組進行不區分大小寫字母的排序。
natcasesort(array)函數用“自然排序”算法對數組排序。

技術分享圖片
<?php
$my_array = array("file1.txt","file11.txt","file2.txt","File22.txt");

echo "用sort排序:";
sort($my_array);
echo "<pre>";
print_r($my_array);
echo "<pre>";

echo "用natsort排序:";
natsort($my_array);
echo "<pre>";
print_r($my_array);
echo "<pre>";

echo "用natcasesort排序:";
natcasesort($my_array);
echo "<pre>";
print_r($my_array);
echo "<pre>";
?> 
技術分享圖片

5.用戶自定義規則對數組排序
usort(array,function)函數使用用戶自定義的比較函數對數組中的值進行排序,會刪除原來的鍵名
function必需。用戶自定義的函數。
函數必須設計為返回 -1, 0, 或 1,並應該接受兩個供比較的參數,同時以類似下面這樣的方式來工作:
如果 a = b, 返回 0
如果 a > b, 返回 1
如果 a < b, 返回 -1
uasort(array,function)函數使用用戶自定義的比較函數對數組排序,並保持索引關聯(不為元素分配新的鍵)。
uksort(array,function)函數使用用戶自定義的比較函數對數組中的鍵名進行排序,,並保持索引關聯(不為元素分配新的鍵)

技術分享圖片
<?php
$arr=array("Linux","Apache","MySql","Php");

usort($arr,"sortbylen");

//用戶自定義按照字符串長度排序函數
function sortbylen($one,$two){
    if(strlen($one)==strlen($two))
        return 0;
    return (strlen($one)>strlen($two))?1:-1;
}

echo "<pre>";
print_r($arr);
echo "<pre>";
?>
技術分享圖片

6.多維數組的排序
array_multisort(array1,sorting order,sorting type,array2,array3...)函數對多個數組或多維數組進行排序。
array1 必需。規定輸入的數組。
sorting order 可選。規定排列順序。可能的值是 SORT_ASC(默認,按升序排列。(A-Z)) 和 SORT_DESC( 按降序排列。(Z-A) )。
sorting type 可選。規定排序類型。可能的值是SORT_REGULAR(默認。將每一項按常規順序排列。)、SORT_NUMERIC(將每一項按數字順序排列。)和SORT_STRING( 將每一項按字母順序排列。)。
array2 可選。規定輸入的數組。
array3 可選。規定輸入的數組。

技術分享圖片
<?php
$a1=array("Aog","Dog","Cat");
$a2=array("Pluto","Fido","Missy");

array_multisort($a1,$a2);

print_r($a1);
print_r($a2);
?>
技術分享圖片

五.數組的拆分、合並、分解、接合的函數
1.array_slice(array,offset,length,preserve)在數組中根據條件取出一段值,並返回。
   offset 必需。數值。規定取出元素的開始位置。
   如果是正數,則從前往後開始取,如果是負值,從後向前取 offset 絕對值。
   length 可選。數值。規定被返回數組的長度。
   如果是負數,則從後向前,選取該值絕對值數目的元素。如果未設置該值,則返回所有元素。
   preserve 可選。可能的值:
   true - 保留鍵
  false - 默認 - 重置鍵

技術分享圖片
<?php
$arr=array("a","b","c","d");

print_r(array_slice($arr,1,2));
echo "<br>";
print_r(array_slice($arr,-2,1));
echo "<br>";
print_r(array_slice($arr,1,2,true));
echo "<br>";
?>
技術分享圖片


2.array_splice()
3.array_combine(array1,array2)通過合並兩個數組來創建一個新數組,其中的一個數組是鍵名,另一個數組的值為鍵值。如果其中一個數組為空,或者兩個數組的元素個數不同,則該函數返回 false。
array1 必需。規定鍵名。
array2 必需。規定值
註意:兩個參數必須有相同數目的元素。

技術分享圖片
<?php
$a=array(1,2,3,4);
$b=array("a","b","c","d");

echo "<pre>";
print_r(array_combine($a,$b));
echo "<pre>";
?>
技術分享圖片


4.array_merge(array1,array2,array3...)把一個或多個數組合並為一個數組。
如果鍵名有重復,該鍵的鍵值為最後一個鍵名對應的值(後面的覆蓋前面的)。如果數組是數字索引的,則鍵名會以連續方式重新索引。

<?php
$a1=array("a"=>"Horse","b"=>"Dog");
$a2=array("c"=>"Cow","b"=>"Cat");
print_r(array_merge($a1,$a2));
?>


5.array_intersect(array1,array2,array3...)計算數組的交集。結果數組包含了所有在被比較數組中,也同時出現在所有其他參數數組中的值,鍵名保留不變。

<?php
$a1=array(0=>"Cat",1=>"Dog",2=>"Horse");
$a2=array(3=>"Horse",4=>"Dog",5=>"Fish");
print_r(array_intersect($a1,$a2));
?>


6.array_diff(array1,array2,array3...)返回兩個數組的差集數組。該數組包括了所有在被比較的數組中,但是不在任何其他參數數組中的鍵值。
註意:都是與第一個數組進行比較

<?php
$a1=array(0=>"Cat",1=>"Dog",2=>"Horse");
$a2=array(3=>"Horse",4=>"Dog",5=>"Fish");
print_r(array_diff($a1,$a2));
?>


六.數組與數據結構的函數
1.使用數組實現堆棧
(1).array_push(array,value1,value2...)將一個或多個單元(元素)壓入數組的末尾(入棧),然後返回新數組的長度。
註釋:即使數組中有字符串鍵名,您添加的元素也始終是數字鍵。(參見例子 2)
註釋:如果用 array_push() 來給數組增加一個單元,還不如用 $array[] =,因為這樣沒有調用函數的額外負擔。
註釋:如果第一個參數不是數組,array_push() 將發出一條警告。這和 $var[] 的行為不同,後者會新建一個數組。
(2).array_pop(array)將數組最後一個單元彈出(出棧)。函數刪除數組中的最後一個元素。返回彈出的值

技術分享圖片
<?php
$a=array(0=>"Cat",1=>"Dog",2=>"Horse");

array_push($a,"one","two");
print_r($a);
echo "<br>";

$value=array_pop($a);
echo $value."<br>";
print_r($a);
echo "<br>";
?>
技術分享圖片


2.使用隊列
(1).array_unshift(array,value1,value2,value3...) 函數在數組開頭插入一個或多個元素。被加上的元素作為一個整體添加,這些元素在數組中的順序和在參數中的順序一樣。該函數會返回數組中元素的個數。
註釋:所有的數值鍵名將修改為從零開始重新計數,所有的字符串鍵名保持不變
(2).array_shift(array)函數刪除數組中的第一個元素,並返回被刪除元素的值。
註釋:如果鍵是數字的,所有元素都將獲得新的鍵,從 0 開始,並以 1 遞增

技術分享圖片
<?php
$a=array("a","b","c","d");

//在數組頭加入數據
array_unshift($a,"one","two");
print_r($a);
echo "<br>";

//刪除數組頭的數據
$value=array_shift($a);
echo $value."<br>";
print_r($a);
echo "<br>";

//從數組的任一一個地方刪除數據
unset($a[1]);
print_r($a);
?>
技術分享圖片


七.其他與數據操作有關的函數
1.array_rand(array,number)從數組中隨機選出一個或多個元素,並返回。
number 可選。默認是 1。規定返回多少個隨機的元素。
2.shuffle(array)把數組中的元素按隨機順序重新排列。
註釋:本函數為數組中的單元賦予新的鍵名。這將刪除原有的鍵名而不僅是重新排序。
3.array_sum(array)計算數組中所有值的和。將字符串轉化成數字

技術分享圖片
<?php
$a=array(1,3,58,69,75,18,59,423);

print_r($a);
echo "<br>";

echo $a[array_rand($a)]."<br>";

shuffle($a);
print_r($a);
echo "<br>";

echo "sum=".array_sum($a);
?>
技術分享圖片


4.range(first,second,step)建立一個包含指定範圍的元素的數組。
first 必需。規定數組元素的最小值。
second 必需。規定數組元素的最大值。
step 可選。規定元素之間的步進制。默認是 1。

技術分享圖片
<?php
$arr=range(0,50,10);

print_r($arr);
echo "<br>";

$arr1=range("a","k");

print_r($arr1);
?>
技術分享圖片

PHP基礎知識6【系統內置函數--數組】