亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

從零開始攻略PHP(4)數組的使用

2020-03-24 16:17:25
字體:
來源:轉載
供稿:網友
  • 1.數組的概念

      數組就是一個用來存儲一系列變量值的命名區域。

      每個數組元素有一個相關的索引(也成為關鍵字),它可以用來訪問元素。

      PHP允許間隔性地使用數字或字符串作為數組的索引。

    2.數字索引數組

      2.1 數字索引數組的初始化

    $products = array(‘Tires’,’Oil’,’Spark Plugs’);

      如果需要將按升序排列的數字保存在一個數組中,可以使用range()函數自動創建這個數組。

      創建一個1-10的數字數組:

    $numbers = range(1,10);

      可選的第三個參數允許設定值之間的步幅。

      創建一個1-10之間的奇數數組:

    $odds = range(1,10,2);

      2.2 訪問數組的內容

      默認情況下,0元素是數組的第一個元素,使用$products[0]、$products[1]、$products[2],就可以使用數組$products的內容了。

      除了訪問,數組的內容可以修改和添加:

    $products[3] = ‘Fuses’;

      像PHP的其他變量一樣,數組不需要預先初始化或創建。在第一次使用它們的時候,它們會自動創建。

      如下代碼創建了一個與前面使用array()語句創建的$products數組相同的數組:

    $products[0] = ‘Tires’;$products[1] = ‘Oil’;$products[2] = ‘Spark Plugs’;

      數組的大小將根據所增加的元素多少動態地變化。

      2.3 使用循環訪問數組

      就是遍歷數組:

    foreach($products as $html' target='_blank'>current){    echo $current.” “;}

      以上代碼將依次保存$current變量中的每一個元素并且打印它們。

    3.使用不同索引的數組

      在上面的$products數組中,允許PHP為每個元素指定一個默認的索引。這就意味著,所添加的第一個元素為元素0,第二個元素為1等。PHP還支持關聯數組。

      3.1 初始化關聯數組

      如下所示的代碼可以創建一個以產品名稱為關鍵字、以價格作為值的關聯數組:

    $prices = array(‘Tires’=>100,’Oil’=>10,’Spark Plugs’=>4);

      3.2 使用循環語句

      因為關聯數組的索引不是數字,因此無法使用for循環語句對數組進行操作。但是可以使用foreach循環或list()和each()結構。

      當使用foreach循環語句對關聯數組進行操作時,可以按如下方式使用關鍵字:

    foreach($prices as $key => $value){    echo $key.” - ”.$value.”<br />”;}

      如下所示的代碼將使用each()結構打印$prices數組的內容。

    while($element = each($prices)){    echo $element[‘key’];    echo “ - ”;    echo $element[‘value’];    echo “<br />”;}

      在這段代碼中,變量$element是一個數組。當調用each()時,它將返回一個帶有4個數值和4個指向數組位置的索引的數組。位置key和0包含了當前元素的關鍵字,而位置value和1包含了當前元素的值。

      除了以上兩種方式,函數list()可以用來將一個數組分解為一系列的值。

    while(list($product,$price) = each($prices)){    echo “$product - $price<br />”;    }

      這個看起來挺高大上,使用each()從$prices數組中取出當前元素,并且將它作為數組返回,然后再指向下一個元素。還使用list()將從each()返回的數組中所包含0、1兩個元素變為兩個名為$product和$price的新變量。

      三種輸出方式的結果相同:

      注意,當使用each()函數時,數組將記錄當前元素。如果希望在相同的腳本中兩次使用該數組,就必須使用函數reset()將當前元素重新設置到數組開始處。要再次遍歷該數組,可以使用以下代碼:

    reset($prices);while( list( $product, $price ) = each( $prices ))echo “$product - $price<br />”;

      以上代碼可以將當前元素重新設置到數組開始處,因此允許再次遍歷數組。

    4.數組操作符

      其中聯合操作符(+)嘗試將$b中的元素添加到$a的末尾。如果$b中的元素與$a中的一些元素具有相同的索引,它們將不會被添加。即$a中的元素將不會被覆蓋。

    5.多維數組

      5.1 二維數組

    $products = array( array( ‘TIR’, ‘Tires’, 100 ),array( ‘OIL’, ‘Oil’, 10 ),array( ‘SPK’, ‘Spark Plugs’, 4 ));

      可以使用雙重for循環來訪問每個元素:

    for($row = 0; $row < 3; $row++){    for($column = 0; $column < 3; $column++){        echo ‘|’.$products[$row][$column];    }    echo ‘|<br />’;}

      可以使用列名稱來代替數字。要保存產品的相同集合,可以使用如下代碼:

    $products = array( array( ‘Code’=>’TIR’,        ‘Description’=>’Tires’,        ‘Price’=>100    ),    array( ‘Code’=> ‘OIL’,        ‘Description’=>’Oil’,        ‘Price’=>10    ),    array(‘Code’=>’SPK’,        ‘Decription’=>’Spark Plugs’,        ‘Price’=>4    ) );            

      如果希望檢索單個值,那么使用這個數組會容易得多。 使用描述性索引,不需要記住某個元素是存放在[x][y]位置的。使用一對有意義的行和列的名稱作為索引可以使你很容易找到所需的數據。

      描述性索引的遍歷:

    for( $row = 0; $row < 3; $row++ ){    while( list( $key, $value ) =each( $products[$row] ) ){        echo “|$value”;    }    echo ‘|<br />’;}

      5.2 三維數組

      三維數組是一個包含了數組的數組的數組。

    $categories = array(    array(        array('CAR_TIR','Tires',100),        array('CAR_OIL','Oil',10),       array('CAR_SPK','Spark Plugs',4)    ),    array(        array('VAN_TIR','Tires',120),        array('VAN_OIL','Oil',12),        array('VAN_SPK','Spark Plugs',5)    ),    array(        array('TRK_TIR','Tires',150),        array('TRK_OLL','Oil',15),        array('TRK_SPK','Spark Plugs',6)    ));            

      遍歷:

    for($layer = 0;$layer < 3;$layer++){    echo 'Layer $layer<br />';    for($row = 0;$row < 3;$row++){        for($column = 0;$column < 3;$column++){            echo '|'.$categories[$layer][$row][$column];        }        echo '|<br />';    }}

      根據創建多維數組的方法,可以創建四維、五維或六維數組。感興趣可以試下。

    6.數組排序

      6.1 使用sort()函數

      sort()函數可以將數組按字母升序進行排序:

    $products = array('LiLei','HanMeimei','Wo');    sort($products);    foreach ($products as $key) {    echo $key.' ';}

      還可以按數字順序進行排序。需要注意的是,sort()函數是區分大小寫的。所有大寫字母都在小寫字母前面。

      第二個參數可選,可指定排序類型:SORT_REGULAR(默認值)、SORT_NUMERIC或SORT_STRING。

      6.2 使用asort()函數和ksort()函數對關聯數組排序

      如果用關聯數組存儲各個項目和它們的價格,就需要用不同的排序函數使關鍵字和值在排序時仍然保持一致。

      如下創建一個包含3個產品和價格的數組:

    $prices = array('Tires'=>100,'Oil'=>10,'Spark Plugs'=>4);

      函數asort()根據數組的每個元素值進行排序:

    asort($prices);while(list($product,$price) = each($prices)){    echo '$product - $price<br />';}

      而函數ksort()則是根據數組的每個關鍵字進行排序:

    ksort($prices);while(list($product,$price) = each($prices)){    echo '$product - $price<br />';}

      6.3 反向排序

      即降序排序,與sort()、asort()、ksort()分別對應的是rsort()、arsort()、krsort()。

    7.多維數組的排序

      7.1 用戶定義排序

    $products = array(    array( 'TIR', 'Tires', 100 ),    array( 'OIL', 'Oil', 10 ),    array( 'SPK', 'Spark Plugs', 4 ));

      自定義排序需要用函數usort()告訴PHP如何比較各個元素。為此需要編寫自己的比較函數。

      如下所示對訂單數組中的第二列按字母進行排序:

    function compare($x, $y){    if($x[1] == $y[1]){        return 0;    }    else if($x[1] < $y[1]){        return -1;    }    else{        return 1;    }}usort($products,'compare');for($row = 0; $row < 3; $row++){    for($column = 0; $column < 3; $column++){        echo '|'.$products[$row][$column];    }    echo '|<br />';}    

      為了能夠被usort()函數使用,compare()函數必須比較$x和$y。如果$x等于$y,該函數必須返回0,如果$x小于$y,該函數必須返回負數,大于則返回正數。最后一句調用了內置函數usort(),該函數使用的參數分別是希望保存的數組($products)和比較函數的名稱(compare())。

      如果要讓數組按另一種順序存儲,只要編寫一個不同的比較函數。

      usort()中的“u”代表“user”,因為這個函數要求傳入用戶定義的比較函數。

      7.2 反向用戶排序

      用戶定義的排序沒有反向變體,但可以對一個多維數組進行反向排序。由于用戶應該提供比較函數,因此可以編寫一個能夠返回相反值的比較函數:

    function reverse_compare($x, $y){  if($x[2] == $y[2]){    return 0;  }  else if($x[1] < $y[1]){    return 1;  }  else{    return -1;  }}

    8.對數組進行重新排序

      shuffle()函數:將數組各元素進行隨機排序。

      array_reverse()函數:給出一個原來數組的反向排序。

    9.從文件載入數組

      當前的訂單文件:

    <?php//create short variable name$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];$orders= file('$DOCUMENT_ROOT/orders.txt');$number_of_orders = count($orders);if ($number_of_orders == 0) {  echo '<p><strong>No orders pending.       Please try again later.</strong></p>';}for ($i=0; $i<$number_of_orders; $i++) {  echo $orders[$i].'<br />';}?>

      還可以將訂單中的每個區段載入到單獨的數組元素中,從而可以分開處理每個區段或將它們更好地格式化。

      用PHP分離、格式化顯示訂單內容:

    <?php  //create short variable name  $DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];?><html><head>  <title>Bob's Auto Parts - Customer Orders</title></head><body><h3>Bob's Auto Parts</h3><h4>Customer Orders</h4><?php  //Read in the entire file.  //Each order becomes an element in the array  $orders= file('$DOCUMENT_ROOT/orders.txt');  // count the number of orders in the array  $number_of_orders = count($orders);  if ($number_of_orders == 0) {    echo '<p><strong>No orders pending.          Please try again later.</strong></p>';  }  echo '<table border='1'>';  echo '<tr><th bgcolor='#CCCCFF'>Order Date</th>            <th bgcolor='#CCCCFF'>Tires</th>            <th bgcolor='#CCCCFF'>Oil</th>            <th bgcolor='#CCCCFF'>Spark Plugs</th>            <th bgcolor='#CCCCFF'>Total</th>            <th bgcolor='#CCCCFF'>Address</th>         <tr>';  for ($i=0; $i<$number_of_orders; $i++) {    //split up each line    $line = explode('	', $orders[$i]);    // keep only the number of items ordered    $line[1] = intval($line[1]);    $line[2] = intval($line[2]);    $line[3] = intval($line[3]);    // output each order    echo '<tr>             <td>'.$line[0].'</td>             <td align='right'>'.$line[1].'</td>             <td align='right'>'.$line[2].'</td>             <td align='right'>'.$line[3].'</td>             <td align='right'>'.$line[4].'</td>             <td>'.$line[5].'</td>          </tr>';  }  echo '</table>';?></body></html>

      這里使用了explode()函數來分隔每行,這樣在開始打印前就可以再做一些處理與格式化。在上一篇中,保存數據的時候使用了制表符作為定界符,因此,將按如下方式調用:

    explode(“	”,$orders[$i]);

      可以使用許多方法從字符串中提取數字。這里使用了intval()函數,可以將一個字符串轉化成一個整數。

    10.執行其他數組操作

      10.1 在數組中瀏覽:each()、current()、reset()、end()、next()、pos()和prev()

      如果創建一個新數組,那么當前指針就將被初始化,并指向數組的第一個元素。

      調用current($array_name)將返回第一個元素。

      調用next()或each()將使指針前移一個元素。其中調用each($array_name)會在指針前移一個位置之前返回當前元素。而調用next($array_name)先將指針前移,然后再返回新的當前元素。

      reset()函數將返回指向數組第一個元素的指針。

      end()函數將返回指向數組最后一個元素的指針。

      prec()函數將當前指針回移一個位置然后再返回新的當前元素??墒褂胑nd()和prev()進行反向遍歷:

    $array = array(7,8,9);$value = end($array);while($value){  echo '$value<br />';  $value = prev($array);}

      10.2 對數組的每一個元素應用任何函數:array_walk()

      array_walk()函數可以以相同方式使用或者修改數組中的每一個元素。

    bool array_walk(array arr,string func,[mixed userdata])

      array_walk()的第一個參數是需要處理的數組,第二個參數是用戶自定義并且將作用于數組中每個元素的函數。

      第三個參數可以作為一個參數傳遞給自己的函數,可選。

      10.3 統計數組元素的個數:count()、sizeof()和array_count_values()

      count()函數和sizeof()函數都可以返回數組元素的個數。

      調用array_count_values($array)將會統計每個特定的值在數組$array中出現過的次數(數組的基數集)。這個函數將返回一個包含頻率表的關聯數組。該數組包括關鍵字以及對應的出現次數。

    10.4 將數組轉換成標量變量:extract()

      函數extract()的作用是通過一個數組創建一系列的標量變量,這些變量的名稱必須是數組中關鍵字的名稱,而變量值則是數組中的值。

      extract()函數具有兩個可選參數:extract_type和prefix。變量extract_type將告訴extract()函數將如何處理沖突。

      兩個最常用的選項是EXTR_OVERWRITE(默認)和EXTR_PREFIX_ALL。

    $array = array('key1'=>'value1','key2'=>'value2','key3'=>'value3');extract($array,EXTR_PREFIX_ALL,'my_prefix');echo '$my_prefix_key1 $my_prefix_key2 $my_prefix_key3';

      可能你已經注意到了,extract()的關鍵字必須是一個有效的變量名稱才行,以數字開始或包含空格的關鍵字將被跳過。

    PHP編程

    鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
    日本免费久久高清视频| 国产精品入口免费视| 欧美午夜精品伦理| 欧美插天视频在线播放| 日韩中文字幕av| 成人在线免费观看视视频| 中文字幕日韩欧美在线| 色99之美女主播在线视频| 久久久亚洲国产天美传媒修理工| 91久久精品国产91性色| 欧美日韩国产成人| 97免费在线视频| 日韩在线观看免费高清完整版| 久久久久久国产三级电影| 激情av一区二区| 国产一区二区三区中文| 亚洲第一精品夜夜躁人人爽| 国产成人jvid在线播放| 久久久久久亚洲精品中文字幕| 91精品久久久久久久久中文字幕| 欧美高清电影在线看| 在线观看不卡av| 精品亚洲国产成av人片传媒| 欧洲成人午夜免费大片| 国产成人精品视| 日韩中文有码在线视频| 国产精品日韩久久久久| 日韩欧美在线观看| 亚洲色图美腿丝袜| 国产精品极品美女在线观看免费| 91国产美女视频| 成人动漫网站在线观看| 欧美黄色小视频| 国外成人在线直播| 日韩美女视频免费在线观看| 欧美日韩黄色大片| 欧美大片免费看| 久久九九亚洲综合| 国产精品极品美女在线观看免费| 91免费看片网站| 欧美裸体xxxx| 91精品国产自产在线| 亚洲图片制服诱惑| 97av在线视频| 国产一区二区三区18| 成人黄色av网站| 在线国产精品视频| 国产精品久久久久久久久久新婚| 亚洲欧美日韩一区二区三区在线| 九九久久久久久久久激情| 久久777国产线看观看精品| 国产一区二区三区在线观看网站| 国产精品久久久久秋霞鲁丝| 日本久久亚洲电影| 亚洲欧洲日本专区| 国产一区二区动漫| 亚洲精品第一页| 亚洲成人久久久久| 青青久久av北条麻妃黑人| 国产精品一区av| 精品一区二区三区三区| 日韩黄在线观看| 欧美在线播放视频| 国模精品视频一区二区三区| 日本久久精品视频| 欧美激情a∨在线视频播放| 欧美自拍视频在线| 尤物九九久久国产精品的分类| 欧美洲成人男女午夜视频| 亚洲精品视频在线观看视频| 欧美日韩中文字幕在线| 欧美中文字幕第一页| 亚洲欧美变态国产另类| 久久夜色精品国产| 精品国产一区二区三区久久久狼| 亚洲一区二区三区四区视频| 日韩精品免费电影| 欧美在线激情网| 日韩国产欧美精品在线| 亚洲精品自在久久| 欧美激情欧美狂野欧美精品| 日韩精品中文字| 亚洲欧美日韩一区二区在线| 97在线免费观看视频| 91精品国产亚洲| 欧美在线影院在线视频| 欧美日韩国产在线| 久久免费国产精品1| 亚洲国产91色在线| 日韩在线视频中文字幕| 国产精品∨欧美精品v日韩精品| 97超级碰碰碰久久久| 国产999精品| 日韩美女福利视频| 91国自产精品中文字幕亚洲| 亚洲国产精品人人爽夜夜爽| 在线精品视频视频中文字幕| 日韩成人在线视频| 亚洲精品动漫100p| 欧美日韩人人澡狠狠躁视频| 亚洲精品日韩在线| 成人观看高清在线观看免费| 亚洲精品视频在线观看视频| 最近2019中文字幕第三页视频| 91精品国产91久久久久久不卡| 亚洲精品国产拍免费91在线| 亚洲欧美一区二区三区在线| 亚洲香蕉伊综合在人在线视看| 岛国精品视频在线播放| 欧美美女15p| 日韩av免费网站| 8050国产精品久久久久久| 欧美日韩国产丝袜另类| 日韩中文在线中文网在线观看| 97国产精品人人爽人人做| 一区二区亚洲欧洲国产日韩| 狠狠久久五月精品中文字幕| 国产在线视频2019最新视频| 亚洲成人国产精品| 国产欧美精品一区二区三区-老狼| 欧美成人中文字幕在线| 欧美性猛交xxxx乱大交| 8x海外华人永久免费日韩内陆视频| 日本aⅴ大伊香蕉精品视频| 性色av一区二区咪爱| 国产精品青青在线观看爽香蕉| 两个人的视频www国产精品| 久久九九国产精品怡红院| 国产欧美中文字幕| 国产精品男人的天堂| 日韩影视在线观看| 欧美性受xxx| 日韩电影中文 亚洲精品乱码| 亚洲一区二区久久久久久久| 9.1国产丝袜在线观看| 97人人模人人爽人人喊中文字| 欧美高清性猛交| 亚洲偷熟乱区亚洲香蕉av| 欧美精品日韩www.p站| 高清在线视频日韩欧美| 久久频这里精品99香蕉| 亚洲精品97久久| 日韩欧美在线中文字幕| 欧美成在线视频| 国产精品中文字幕在线| 日韩综合视频在线观看| 国产色婷婷国产综合在线理论片a| 日本精品久久久久久久| 国产精品丝袜久久久久久不卡| 亚洲视频在线播放| 日韩欧美主播在线| 91视频8mav| 欧美日韩加勒比精品一区| 欧美激情欧美狂野欧美精品| 国外日韩电影在线观看| 日韩av综合网站| 日韩电影中文字幕av| 日韩女优在线播放| 2019中文字幕免费视频| 国产精品久久久久久久久久新婚| 88xx成人精品| 成人黄色在线免费| 亚洲视频一区二区三区| 国产精品日韩精品|