PHP基礎教程八之數組

來源:互聯網
上載者:User

本節講解內容

  • 數組的介紹

  • 數組的建立

  • 數組的動態增長

  • 數組的遍曆

  • 數組的相關函數

  • 數組運算子

前言

在前面我們所學的不管是變數和常量,都是一個個單個的資料,而有時候我們有這樣的需求,需要把一些相同類型的數值或一些不相干的數值,合理的儲存起來,而用到的時候可以按照某種規則取出資料。這時候前面的變數等就不能滿足要求,在這裡就是用到數組。

數組的介紹

PHP中的數組和別的語言的數組不一樣,這也是PHP語言文法的鬆散性造成的。那有什麼不一樣?

所謂數組,就是相同資料類型或不同的資料類型元素按一定順序排列的集合,就是把有限個變數用一個名字命名,然後用編號區分他們的變數的集合,這個名字稱為數組名,編號稱為下標。組成數組的各個變數稱為數組的分量,也稱為數組的元素,有時也稱為下標變數。

數組的定義通俗的理解就是存放資料的集合,

<?php    //定義一個數組,裡面存放的資料類型可以任意類型    $arr = array(12,true,false,'abcd',12.2);    print_r($arr);//輸出數組。.....結果......Array ( [0] => 12 [1] => 1 [2] => [3] => abcd [4] => 12.2 )

可以看到在數組中存放各種資料類型,在輸出的時候都可以進行輸出。並且可以看到在輸出的時候,每個數值都有一個下標於之對應,這個下標就稱之為鍵(key),而數值是值(value),我們在想取某個值得時候可以通過鍵來取。

$a = 數組名[鍵名]echo $arr[0];.....結果......12

當數組的索引值是數位時候,它的下標是從0開始計算的。

那麼數組的怎麼建立的呢?

數組建立的三種方式

  • 索引數組(下標是數位)在PHP中定義數組的方式有三種。

  • 關聯陣列(下標是字串)

  • 數組的下標兩者都有。

第一種

<?php    //定義數組,數值用逗號隔開。    $arr = array(1,2,3,4,'abcd',true);    print_r($arr);.....結果......Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => abcd [5] => 1 )

用 array() 語言結構來建立一個數組,從輸出結果中可以看到下標是數字。而取資料也是通過數字下標來取的。這就是索引數組。

第二種

<?php    //關聯陣列,自己定義下標,用=>來定義鍵和值    $arr = array('a' => 1,'b' => 2,'c' => 'abcde', 'd' => true);    print_r($arr);.....結果......Array ( [a] => 1 [b] => 2 [c] => abcde [d] => 1 )

這種方法也是用array()文法結構來定義的,但是數組的下標是我們自己定義的,這裡可以根據自己的情況自己定義下標。關於索引值得定義需要注意,key 會有如下的強制轉換

  1. 包含有合法整型值的字串會被轉換為整型。例如鍵名 “8” 實際會被儲存為 8。但是 “08” 則不會強制轉換,因為其不是一個合法的十進位數值。

  2. 浮點數也會被轉換為整型,意味著其小數部分會被捨去。例如鍵名 8.7 實際會被儲存為 8。

  3. 布爾值也會被轉換成整型。即鍵名 true 實際會被儲存為 1 而鍵名 false 會被儲存為 0。

  4. Null 會被轉換為空白字串,即鍵名 null 實際會被儲存為 “”。

  5. 數組和對象不能被用為鍵名。堅持這麼做會導致警告:Illegal offset type。

如果在數組定義中多個單元都使用了同一個鍵名,則只使用了最後一個,之前的都被覆蓋了。

取關聯陣列中的值需要使用自己定義的鍵來取。

第三種

<?php    $arr[0] = 1;    $arr[2] = 2;    $arr['a'] = 12;    $arr[4] = 45;    print_r($arr); .....結果......Array ( [0] => 1 [2] => 2 [a] => 12 [4] => 45 )

第三種數組的定義可以直接用方括弧進行定義,系統會預設的認為這是一個數組,並進行建立。至於下標你可以使用數字或者字串。但是如果在數組定義中多個單元都使用了同一個鍵名,則只使用了最後一個,之前的都被覆蓋了。

數組的動態增長

PHP的數組的長度是一個不固定的,當你填完資料時候,你還是可以進行填寫資料的,同時數組的長度也會跟著增加,這就是php數組的動態增長。

<?php    for($i = 0; $i < 10; $i++){        $arr[] = $i;    }    print_r($arr);......結果.......Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 [9] => 9 )

上面的代碼利用一個for迴圈,使用數組的第三種定義方式進行賦值,但是可以看到我們並沒有在數組的方括弧裡面寫下標,但是程式並沒有報錯,這是因為數組的動態增長。如果未指定key的值,PHP 將自動使用之前用過的最大 integer 鍵名加上 1 作為新的鍵名。因此,在輸出結果中可以看到下標是從0開始自動成長的。

數組的遍曆

前面我們介紹了數組的建立和基本的使用,那麼怎麼從數組中全部的取出裡面的值?在PHP中,可以使用迴圈控制流程程取到數組中的值,通過迴圈遍曆數組來逐個得到裡面的值。

for

在數組的遍曆中可以使用for來的到數組裡面的值。

<?php    $arr = array(1,9,4,2,8,10,5);    $sum = count($arr);    for($i = 0; $i < $sum; $i++){        echo $arr[$i] . '  ';    }.....結果......1 9 4 2 8 10 5

上面的count()這個系統函數是統計一個數組裡的所有元素,或者一個對象裡的東西。從而的到數組的大小,也就是長度。然後通過for迴圈,把$i當做數組的下標($i從0開始)。

foreach

在上面的代碼中如果我們的數組是關聯陣列,也就是數組的下標是一個字串,那麼上面的代碼是不可能取出來。所以我們可以使用PHP提供的另外一種迴圈方法:foreach()。它的文法有兩種:

foreach(數組名 as $key => $value){}foreach(數組名 as $value){}

其中“as”是一個關鍵字,不能變。

foreach裡面有可以有三個參數,第一個參數是數組的名字,第二個參數

value是用來儲存從數組中取出來的值。當然鍵和值得名字可以根據自己的情況自己取。

當裡面的參數是兩個的時候,$value只用來存放從數組中取出來的值,而沒有鍵。

<?php    $arr = array(1,9,4,2,8,10,5);    foreach ($arr as $key => $value) {        echo $key . '=>' . $value . '  ';    }    echo '<br>';    foreach ($arr as $value) {        echo $value . '  ';    }.....結果......0=>1 1=>9 2=>4 3=>2 4=>8 5=>10 6=>5 1 9 4 2 8 10 5

在第二個迴圈中沒有鍵的輸出。

上面的兩種迴圈結構,就是我們常用到的數組遍曆的方法,其中第二個方法,也就是用foreach的方法,我們會經常用到,因為這種方法對於所有的數組都適用,而不用考慮下標的問題。

數組的相關函數

  • count($array) 統計一個數組裡的所有元素,或者一個對象裡的東西。從而的到數組的大小,也就是長度。然後通過for迴圈,把

    i從0開始)。

  • is_array($arr) 判斷變數是否是一個數組。傳一個變數進去,如果這個變數是一個數組,則返回true,否則則返回false;

  • array_search (value) 在數組中搜尋給定的值,如果成功則返回相應的鍵名 。當我們想知道一個數組中有沒有一個數,可以使用這個函數,如果數組中有你想找的值,則返回這個值對應的索引值。

  • array_reverse($arr),傳進去一個數組,返回一個與這個數組相反的數組。

    <?php$arr = array(1,9,4,2,8,10,5);$array = array_reverse($arr);print_r($array);.....結果......Array ( [0] => 5 [1] => 10 [2] => 8 [3] => 2 [4] => 4 [5] => 9 [6] => 1 )
  • array_merge($arr1,$arr2),傳進去兩個數組,一個數組中的值附加在前一個數組的後面。返回作為結果的數組。 如果輸入的數組中有相同的字串鍵名,則該鍵名後面的值將覆蓋前一個值。然而,如果數組包含數字鍵名,後面的值將不會覆蓋原來的值,而是附加到後面。

  • unset($value) 傳進去的變數可以銷毀一個數組,也可以銷毀數組中的一個值,當通過數組[下標]的方式傳入是,會銷毀數組中的這個值,但是當傳進去的數組時,會把整個數組進行銷毀。

  • sort() 本函數對數組進行排序。當本函數結束時數組單元將被從最低到最高重新安排。當數組中值都是數位時候,可以使用這個函數進行排序,不過排序的結果是數字按照從小到大的順序。

    <?php    $arr = array(1,9,4,2,8,10,5);    sort($arr);    print_r($arr);.....結果.....Array ( [0] => 1 [1] => 2 [2] => 4 [3] => 5 [4] => 8 [5] => 9 [6] => 10 )
  • usort($array,func_name) 傳進去一個數組,和一個自己寫的方法名。使用使用者自訂的比較函數對數組中的值進行排序,在上面的一個方法,你只能得到從小到大的順序,但是我們的要求是從大到小,這就會用到這個函數,第二個參數是我們寫的定序的函數。

    <?php$arr = array(1,9,4,2,8,10,5);function mysort($a,$b){ //寫自己的函數,使數組按照從大到小的順序進行排序。if($a == $b){    return 0;}    return $a < $b ? 1 : -1;}usort($arr, 'mysort');print_r($arr);......結果......Array ( [0] => 10 [1] => 9 [2] => 8 [3] => 5 [4] => 4 [5] => 2 [6] => 1 )

    這裡使用到可變函數。

數組的運算子

我們在運算子那一節並沒有講到數組的運算子,其實數組也是有運算子的。

  • $a + $b 聯合 $a 和 $b 的聯合。運算子把右邊的數組元素附加到左邊的數組後面,兩個數組中都有的鍵名,則只用左邊數組中的,右邊的被忽略。

  • $a == $b 相等 如果 $a 和 $b 具有相同的鍵/值對則為 TRUE 。

  • $a === $b 全等 如果 $a 和 $b 具有相同的鍵/值對並且順序和類型都相同則為 TRUE 。

  • $a != $b 不等 如果 $a 不等於 $b 則為 TRUE 。

  • $a <> $b 不等 如果 $a 不等於 $b 則為 TRUE 。

  • $a !== $b 不全等 如果 $a 不全等於 $b 則為 TRUE 。
    在這裡看來數組的運算子也是很好理解的。

總結

數組講到這裡,算是基本講完了,數組在我們的開發中是經常用到的,不止上面的以為數組,有時候數組裡面還可能是一個數組,只要數組的結構在腦海中有清晰的認識,不管有幾個數組,都是可以解決的,同時數組的出現也引出了一些關於數組的演算法。

以上就是PHP基礎教程八之數組的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!

  • 聯繫我們

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