細說php(六) 數組

來源:互聯網
上載者:User

一、數組概述

1.1 數組是複合類型

1.2 數組中可以儲存任意長度的資料, 也可以儲存任意類型的資料


二、數組的類型

2.1 索引數組: 下標是順序整數作為索引

<?php$user[0] = 1;$user[1] = "zhangsan";$user[2] = "aaa@bb.com";echo '<pre>';print_r($user);echo '</pre>';?>

2.2 關聯陣列: 下標是字串作為索引

<?php$user["id"] = 1;$user["name"] = "zhangsan";$user["email"] = "aaa@bb.com";echo '<pre>';print_r($user);echo '</pre>';$user["name"] = "lisi";echo $user["name"];?>

三、數組的多種聲明方式

3.1 直接為數組元素賦值

      a. 如果索引下標不給值,就會從0開始順序索引
      b. 如果給出索引下標,下一個就會是從最大的開始增1

      c. 如果後面出現前面的下標,如果是賦值就是為前面的元素重新賦值
      d. 混合聲明時,索引和關聯不互相影響(不影響索引下標的聲明)


3.2 使用array()函數

      a.  預設是索引數組

      b. 如果為關聯陣列和索引數組指定下標,使用 鍵=>值
      c. 多個成員之前使用“,”分割

<?php$user1 = array (1, "zhsangsan", 10, "nan", "aaa@bbb.com");echo '<pre>';print_r($user1);echo '</pre>';/** Array(    [0] => 1    [1] => zhsangsan    [2] => 10    [3] => nan    [4] => aaa@bbb.com ) */$user2 = array("id"=>1, "name"=>"zhsangsan", "age"=>10, 100=>"nan", "aaa@bbb.com");echo '<pre>';print_r($user2);echo '</pre>';/** Array(    [id] => 1    [name] => zhsangsan    [age] => 10    [100] => nan    [101] => aaa@bbb.com ) */?>

重要知識點: 二維數組

<?php$info=array("user"=>array(array(1, "zansan", 10, "nan"),array(2, "lisi", 20, "nv") ));echo $info["user"][1][1]; // lisiecho '<pre>';print_r($info);echo '</pre>';/** Array (    [user] => Array        (            [0] => Array                (                    [0] => 1                    [1] => zansan                    [2] => 10                    [3] => nan                )            [1] => Array                (                    [0] => 2                    [1] => lisi                    [2] => 20                    [3] => nv                )        )) */?>

四、數組的遍曆

4.1 使用for語句迴圈遍曆(不推薦)

      局限性: 數組必須是索引數組, 而且下標必須是連續的 (然而索引數組下標可以不連續, 數組還可能是關聯陣列)

<?php  $user = array(1, "zhasna", "aaa@bb.com");for($i = 0; $i < count($user); $i++){echo "\$user[{$i}]=".$user[$i]."<br>";}/** $user[0]=1$user[1]=zhasna$user[2]=aaa@bb.com */?>

4.2 使用foreach語句迴圈遍曆(強烈推薦)

      迴圈次數由數組的元素個數決定, 每一次迴圈都會將數組中的元素分別賦值給後面的變數

<?php    $user=array(1, "name"=>"zhasna", "age"=>40, 100=>"nan", "aaa@bb.com");    foreach($user as $key => $val){   // $var 是自訂變數, $key自訂變數  echo $key." =====> ".$val."<br>";    }        /*     0 =====> 1name =====> zhasnaage =====> 40100 =====> nan101 =====> aaa@bb.com     */        foreach($user as $val){   // 不要key也可以, 直接遍曆$user的值  echo $val."<br>";    }        /*     1     zhasna40nanaaa@bb.com     */?>

4.3 使用while(), list(), each() 組合迴圈遍曆(不推薦)

      each() 函數:

      * 需要一個數組作為參數

      * 返回來的也是一個數組

      * 返回來的數組時0, 1, key, value四個下標, 0和key下標是當前數組元素的鍵, 1和value下標是當前數組元素的值

      * 預設當前元素就是第一個元素

      * 每執行一次後就會將當前元素向後移動

      * 如果已經到了最後還執行這個函數, 則返回false

<?php$user = array("id"=>1, "name"=>"zhangsan", "age"=>10, "sex"=>"nan");while($arr = each($user)){// echo $arr[0]."==>".$arr[1]."<br>";echo $arr["key"]." ----> ".$arr["value"]."<br>";}/** id ----> 1name ----> zhangsanage ----> 10sex ----> nan */?>

      list() 函數:

      * list()=array(); 需要將一個數組賦值給這個函數

      * 數組中的元素個數要和list()函數中的參數個數相同
      * 數組中的每個元素值會賦值給list()函數中的每個參數,list()將每個參數轉為變數

      * list()只能接收索引數組

<?phplist($name, $age, $sex) = array("zansan", 10, "nnnnn");echo $name."<br>";echo $age."<br>";  // list中的值和數組中的值一一對應echo $sex."<br>";  // 如果不想給name賦值, 那就寫成list(, $age, $sex)/* zansan10nnnnn */ $user1 = array("id"=>1, "name"=>"zhangsan", "age"=>10, "sex"=>"nan");list($key, $value) = each($user1);  // Array ( [1] => 1  [0] => id  ) echo $key." --> ".$value;/* id --> 1 */$user2 = array("id"=>1, "name"=>"zhangsan", "age"=>10, "sex"=>"nan");while(list($key, $value) = each($user2)){echo $key." ==> ".$value."<br>";}/* name ==> zhangsanage ==> 10sex ==> nan */?>

五、預定義數組

自動全域變數 -- 超全域數組
1. 包含了來自WEB伺服器,用戶端,運行環境和使用者輸入的資料
2. 預定義數組在全域範圍內自動生效,例如在函數中不用聲明global也可以使用這些數組
3. 使用者不能自訂這些數組, 但這些資料操作方式又和我們自訂的數組操作方式一樣

 *   $_GET             // 經由URL請求提交至指令碼的變數 
 *   $_POST           // 經由HTTP POST方法提交到指令碼的變數
 *   $_REQUEST   // 經由GET, POST和COOKIE機制提交到指令碼的變數,因此該數組並不值得信任,盡量不去使用
 *   $_FILES         // 經由HTTP POST 檔案上傳而提交至指令碼的變數
 *   $_COOKIE      //
 *   $_SESSION   //
 *   $_ENV            // 執行環境提交至指令碼的變數
 *   $_SERVER      // 變數由WEB伺服器設定的,或直接和當前指令碼的執行環境相關聯
 *   $GLOBALS      // 只要是當前指令碼有效變數都在這裡,數組鍵名為全域變數的名稱

<?phpprint_r($_GET);echo $_GET["username"]."<br>"; // 擷取get方式url中的usernameprint_r($_POST);echo $_POST["uname"]."<br>"; // 擷取post方式表單提交的unameprint_r($_REQUEST);echo $_ENV["OS"]."<br>";  // 擷取key為'OS'的valueecho $_SERVER["DOCUMENT_ROOT"]."<br>";  // 擷取key為'DOCUMENT_ROOT'的value$a = 100; // 定義的變數會存到$GLOBALS中function demo(){echo $GLOBALS["a"]."<br>";  // 無需聲明global就可以直接取值}demo();?><form action="demo.php" method="post">   <!-- post方式提交資料, 資料會存到$_POST中 -->username: <input type="text" name="uname"><br>password: <input type="password" name="pass"><br><input type="submit" value="login"> <br></form><a href="demo.php?username=zhangsan">this is a $_GET test</a> <!-- get方式提交資料, 資料會存到$_GET中 -->

六、數組相關函數

1.  數組鍵/值操作有關的函數
 *  1.1   array_values()  返回 input 數組中所有的值並給其建立數字索引

<?php$array = array ("size" => "XL","color" => "gold");print_r(array_values($array));/*Array(    [0] => XL    [1] => gold) */?> 
 *  1.2  array_keys()  返回數組中所有的鍵名

<?php$array = array (0 => 100,"color" => "red");print_r(array_keys($array));/* Array(    [0] => 0    [1] => color) */?>
 *  1.3  in_array()  檢查數組中是否存在某個值

<?php$os = array ("Mac", "NT", "Irix", "Linux");if (in_array("Irix", $os)) {echo "Got Irix";}if (in_array("mac", $os)) {echo "Got mac";}?>
 *  1.4  array_key_exists  當給定的key存在於數組中時返回 TRUE

<?php$search_array = array ('first' => 1,'second' => 4);if (array_key_exists('first', $search_array)) {echo "The 'first' element is in the array";}?>
 *  1.5  array_flip  交換數組中的鍵和值

<?php$trans = array ("a" => 1,"b" => 1,"c" => 2);$trans = array_flip($trans);print_r($trans);  // Array ( [1] => b [2] => c ) // 如果同一個值出現了多次,則最後一個鍵名將作為它的值,所有其它的都丟失了?> 
 *  1. 6  array_reverse  返回一個單元順序相反的數組 
<?php$input = array ("php",4.0,array ("green","red"));$result = array_reverse($input);print_r($result);// Array ( [0] => Array ( [0] => green [1] => red ) [1] => 4 [2] => php ) ?> 
2. 統計數組元素的個數和惟一性
 *  2. 1  count()    sizeof();

<?php$a[0] = 1;$a[1] = 3;$a[2] = 5;$result = count($a);print_r($result);  // 3?> 
 *  2. 2  array_count_values  統計數組中所有的值出現的次數

<?php$array = array (1,"hello",1,"world","hello");echo "<pre>";print_r(array_count_values($array));echo "</pre>";/* Array(    [1] => 2    [hello] => 2    [world] => 1) */
 *  2. 3  array_unique  移除數組中重複的值

<?php$input = array("a" => "green", "red", "b" => "green", "blue", "red");$result = array_unique ($input);echo "<pre>";print_r($result);echo "</pre>";/* Array(    [a] => green    [0] => red    [1] => blue) */?> 
3. 使用回呼函數處理數組的函數

 *  3.1  array_filter()  用回呼函數過濾數組中的單元 

<?phpfunction odd($var) {// returns whether the input integer is oddreturn ($var & 1);}$array = array ("a" => 1,"b" => 2,"c" => 3);echo "<pre>";print_r(array_filter($array, "odd"));echo "</pre>";/* Array(    [a] => 1    [c] => 3) */?> 

 *  3.2  array_walk()  使用使用者自訂函數對數組中的每個元素做回調處理

<?php$fruits = array ("d" => "lemon","a" => "orange","b" => "banana","c" => "apple");// funcname 接受兩個參數。array參數的值作為第一個,鍵名作為第二個。function test_print($item, $key) {echo " $key =>  $item <br />\n";}array_walk($fruits, 'test_print'); /*d => lemona => orangeb => bananac => apple  */?> 

 *  3.3  array_map()   將回呼函數作用到給定數組的單元上

<?phpfunction cube($n){    return($n * $n * $n);}$a = array(1, 2, 3, 4, 5);$b = array_map ("cube", $a);print_r($b);// Array ([0] => 1 [1] => 8 [2] => 27 [3] => 64 [4] => 125) ?> 

4.  數組的排序函數
 *  4.1  sort()   rsort() 簡單的數組排序  

<?php$fruits  = array("lemon", "orange", "banana", "apple");sort($fruits);foreach ($fruits as $key => $val) {    echo  "fruits[" . $key . "] = " . $val . "<br>";}/* fruits[0] = applefruits[1] = bananafruits[2] = lemonfruits[3] = orange */?>
 *  4.2 ksort()   krsort() 根據鍵名對數組排序  

<?php$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");ksort($fruits);foreach ($fruits as $key => $val){    echo "$key = $val <br>";}/* a = orange b = banana c = apple d = lemon  */?>  
 *  4.3 asort()  arsort() 根據元素的值對數組排序  

<?php$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");asort($fruits);foreach ($fruits as $key => $val){    echo "$key = $val <br>";}/*c = appleb = bananad = lemona = orange  */?> 
 *  4.4   natsort()  natcasesort() 根據“自然數排序”法對數組排序

<?php$array = array("img12.png", "img10.png", "img2.png", "img1.png");asort($array);echo "<pre>";print_r($array);echo "</pre>";/*Array(    [3] => img1.png    [1] => img10.png    [0] => img12.png    [2] => img2.png) */?>
 *  4.5 usort() uasort() uksort() 根據使用者自訂規則對數組排序  

<?phpfunction cmp($a, $b){    if($a == $b){        return 0;    }    return ($a < $b) ? - 1 : 1;}$a = array(3, 2, 5, 6, 1);usort($a , "cmp");foreach ($a as $key => $value) {    echo "$key : $value <br>" ;}/*0 : 11 : 22 : 33 : 54 : 6  */ ?> 
 *  4.6 array_multisort 一次對多個數組進行排序

5.  拆分、合并、分解、接合的數組函數
 *  5.1  array_slice()  從數組中取出一段
 *  5.2  array_splice() 把數組中的一部分去掉並用其它值取代
 *  5.3  array_combine()  建立一個數組,用一個數組的值作為其鍵名,另一個數組的值作為其值
 *  5.4  array_merge()  合并一個或多個數組
 *  5.5  array_intersect() 計算數組的交集
 *  5.6  array_diff() 計算數組的差集

6.  數組與資料結構的函數
 *  6.1 array_push()   array_pop()  使用資料實現堆棧  
 *  6.2 array_unshift()   array_shift()   unset() 使用隊列  
 
7. 其它與資料操作有關的函數 
 *  7.1 array_rand()  從數組中隨機取出一個或多個單元
 *  7.2 shuffle()  將數組打亂
 *  7.3 array_sum()  計算數組中所有值的和
 *  7.4 range()  建立一個包含指定範圍單元的數組



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.