麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 編程 > PHP > 正文

從零開(kāi)始攻略PHP(4)數(shù)組的使用

2020-03-24 16:17:25
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
  • 1.數(shù)組的概念

      數(shù)組就是一個(gè)用來(lái)存儲(chǔ)一系列變量值的命名區(qū)域。

      每個(gè)數(shù)組元素有一個(gè)相關(guān)的索引(也成為關(guān)鍵字),它可以用來(lái)訪問(wèn)元素。

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

    2.數(shù)字索引數(shù)組

      2.1 數(shù)字索引數(shù)組的初始化

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

      如果需要將按升序排列的數(shù)字保存在一個(gè)數(shù)組中,可以使用range()函數(shù)自動(dòng)創(chuàng)建這個(gè)數(shù)組。

      創(chuàng)建一個(gè)1-10的數(shù)字?jǐn)?shù)組:

    $numbers = range(1,10);

      可選的第三個(gè)參數(shù)允許設(shè)定值之間的步幅。

      創(chuàng)建一個(gè)1-10之間的奇數(shù)數(shù)組:

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

      2.2 訪問(wèn)數(shù)組的內(nèi)容

      默認(rèn)情況下,0元素是數(shù)組的第一個(gè)元素,使用$products[0]、$products[1]、$products[2],就可以使用數(shù)組$products的內(nèi)容了。

      除了訪問(wèn),數(shù)組的內(nèi)容可以修改和添加:

    $products[3] = ‘Fuses’;

      像PHP的其他變量一樣,數(shù)組不需要預(yù)先初始化或創(chuàng)建。在第一次使用它們的時(shí)候,它們會(huì)自動(dòng)創(chuàng)建。

      如下代碼創(chuàng)建了一個(gè)與前面使用array()語(yǔ)句創(chuàng)建的$products數(shù)組相同的數(shù)組:

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

      數(shù)組的大小將根據(jù)所增加的元素多少動(dòng)態(tài)地變化。

      2.3 使用循環(huán)訪問(wèn)數(shù)組

      就是遍歷數(shù)組:

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

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

    3.使用不同索引的數(shù)組

      在上面的$products數(shù)組中,允許PHP為每個(gè)元素指定一個(gè)默認(rèn)的索引。這就意味著,所添加的第一個(gè)元素為元素0,第二個(gè)元素為1等。PHP還支持關(guān)聯(lián)數(shù)組。

      3.1 初始化關(guān)聯(lián)數(shù)組

      如下所示的代碼可以創(chuàng)建一個(gè)以產(chǎn)品名稱(chēng)為關(guān)鍵字、以?xún)r(jià)格作為值的關(guān)聯(lián)數(shù)組:

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

      3.2 使用循環(huán)語(yǔ)句

      因?yàn)殛P(guān)聯(lián)數(shù)組的索引不是數(shù)字,因此無(wú)法使用for循環(huán)語(yǔ)句對(duì)數(shù)組進(jìn)行操作。但是可以使用foreach循環(huán)或list()和each()結(jié)構(gòu)。

      當(dāng)使用foreach循環(huán)語(yǔ)句對(duì)關(guān)聯(lián)數(shù)組進(jìn)行操作時(shí),可以按如下方式使用關(guān)鍵字:

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

      如下所示的代碼將使用each()結(jié)構(gòu)打印$prices數(shù)組的內(nèi)容。

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

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

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

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

      這個(gè)看起來(lái)挺高大上,使用each()從$prices數(shù)組中取出當(dāng)前元素,并且將它作為數(shù)組返回,然后再指向下一個(gè)元素。還使用list()將從each()返回的數(shù)組中所包含0、1兩個(gè)元素變?yōu)閮蓚€(gè)名為$product和$price的新變量。

      三種輸出方式的結(jié)果相同:

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

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

      以上代碼可以將當(dāng)前元素重新設(shè)置到數(shù)組開(kāi)始處,因此允許再次遍歷數(shù)組。

    4.數(shù)組操作符

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

    5.多維數(shù)組

      5.1 二維數(shù)組

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

      可以使用雙重for循環(huán)來(lái)訪問(wèn)每個(gè)元素:

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

      可以使用列名稱(chēng)來(lái)代替數(shù)字。要保存產(chǎn)品的相同集合,可以使用如下代碼:

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

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

      描述性索引的遍歷:

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

      5.2 三維數(shù)組

      三維數(shù)組是一個(gè)包含了數(shù)組的數(shù)組的數(shù)組。

    $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 />';    }}

      根據(jù)創(chuàng)建多維數(shù)組的方法,可以創(chuàng)建四維、五維或六維數(shù)組。感興趣可以試下。

    6.數(shù)組排序

      6.1 使用sort()函數(shù)

      sort()函數(shù)可以將數(shù)組按字母升序進(jìn)行排序:

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

      還可以按數(shù)字順序進(jìn)行排序。需要注意的是,sort()函數(shù)是區(qū)分大小寫(xiě)的。所有大寫(xiě)字母都在小寫(xiě)字母前面。

      第二個(gè)參數(shù)可選,可指定排序類(lèi)型:SORT_REGULAR(默認(rèn)值)、SORT_NUMERIC或SORT_STRING。

      6.2 使用asort()函數(shù)和ksort()函數(shù)對(duì)關(guān)聯(lián)數(shù)組排序

      如果用關(guān)聯(lián)數(shù)組存儲(chǔ)各個(gè)項(xiàng)目和它們的價(jià)格,就需要用不同的排序函數(shù)使關(guān)鍵字和值在排序時(shí)仍然保持一致。

      如下創(chuàng)建一個(gè)包含3個(gè)產(chǎn)品和價(jià)格的數(shù)組:

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

      函數(shù)asort()根據(jù)數(shù)組的每個(gè)元素值進(jìn)行排序:

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

      而函數(shù)ksort()則是根據(jù)數(shù)組的每個(gè)關(guān)鍵字進(jìn)行排序:

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

      6.3 反向排序

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

    7.多維數(shù)組的排序

      7.1 用戶(hù)定義排序

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

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

      如下所示對(duì)訂單數(shù)組中的第二列按字母進(jìn)行排序:

    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()函數(shù)使用,compare()函數(shù)必須比較$x和$y。如果$x等于$y,該函數(shù)必須返回0,如果$x小于$y,該函數(shù)必須返回負(fù)數(shù),大于則返回正數(shù)。最后一句調(diào)用了內(nèi)置函數(shù)usort(),該函數(shù)使用的參數(shù)分別是希望保存的數(shù)組($products)和比較函數(shù)的名稱(chēng)(compare())。

      如果要讓數(shù)組按另一種順序存儲(chǔ),只要編寫(xiě)一個(gè)不同的比較函數(shù)。

      usort()中的“u”代表“user”,因?yàn)檫@個(gè)函數(shù)要求傳入用戶(hù)定義的比較函數(shù)。

      7.2 反向用戶(hù)排序

      用戶(hù)定義的排序沒(méi)有反向變體,但可以對(duì)一個(gè)多維數(shù)組進(jìn)行反向排序。由于用戶(hù)應(yīng)該提供比較函數(shù),因此可以編寫(xiě)一個(gè)能夠返回相反值的比較函數(shù):

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

    8.對(duì)數(shù)組進(jìn)行重新排序

      shuffle()函數(shù):將數(shù)組各元素進(jìn)行隨機(jī)排序。

      array_reverse()函數(shù):給出一個(gè)原來(lái)數(shù)組的反向排序。

    9.從文件載入數(shù)組

      當(dāng)前的訂單文件:

    <?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 />';}?>

      還可以將訂單中的每個(gè)區(qū)段載入到單獨(dú)的數(shù)組元素中,從而可以分開(kāi)處理每個(gè)區(qū)段或?qū)⑺鼈兏玫馗袷交?/p>

      用PHP分離、格式化顯示訂單內(nèi)容:

    <?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()函數(shù)來(lái)分隔每行,這樣在開(kāi)始打印前就可以再做一些處理與格式化。在上一篇中,保存數(shù)據(jù)的時(shí)候使用了制表符作為定界符,因此,將按如下方式調(diào)用:

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

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

    10.執(zhí)行其他數(shù)組操作

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

      如果創(chuàng)建一個(gè)新數(shù)組,那么當(dāng)前指針就將被初始化,并指向數(shù)組的第一個(gè)元素。

      調(diào)用current($array_name)將返回第一個(gè)元素。

      調(diào)用next()或each()將使指針前移一個(gè)元素。其中調(diào)用each($array_name)會(huì)在指針前移一個(gè)位置之前返回當(dāng)前元素。而調(diào)用next($array_name)先將指針前移,然后再返回新的當(dāng)前元素。

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

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

      prec()函數(shù)將當(dāng)前指針回移一個(gè)位置然后再返回新的當(dāng)前元素。可使用end()和prev()進(jìn)行反向遍歷:

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

      10.2 對(duì)數(shù)組的每一個(gè)元素應(yīng)用任何函數(shù):array_walk()

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

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

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

      第三個(gè)參數(shù)可以作為一個(gè)參數(shù)傳遞給自己的函數(shù),可選。

      10.3 統(tǒng)計(jì)數(shù)組元素的個(gè)數(shù):count()、sizeof()和array_count_values()

      count()函數(shù)和sizeof()函數(shù)都可以返回?cái)?shù)組元素的個(gè)數(shù)。

      調(diào)用array_count_values($array)將會(huì)統(tǒng)計(jì)每個(gè)特定的值在數(shù)組$array中出現(xiàn)過(guò)的次數(shù)(數(shù)組的基數(shù)集)。這個(gè)函數(shù)將返回一個(gè)包含頻率表的關(guān)聯(lián)數(shù)組。該數(shù)組包括關(guān)鍵字以及對(duì)應(yīng)的出現(xiàn)次數(shù)。

    10.4 將數(shù)組轉(zhuǎn)換成標(biāo)量變量:extract()

      函數(shù)extract()的作用是通過(guò)一個(gè)數(shù)組創(chuàng)建一系列的標(biāo)量變量,這些變量的名稱(chēng)必須是數(shù)組中關(guān)鍵字的名稱(chēng),而變量值則是數(shù)組中的值。

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

      兩個(gè)最常用的選項(xiàng)是EXTR_OVERWRITE(默認(rèn))和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';

      可能你已經(jīng)注意到了,extract()的關(guān)鍵字必須是一個(gè)有效的變量名稱(chēng)才行,以數(shù)字開(kāi)始或包含空格的關(guān)鍵字將被跳過(guò)。

    PHP編程

    鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

  • 發(fā)表評(píng)論 共有條評(píng)論
    用戶(hù)名: 密碼:
    驗(yàn)證碼: 匿名發(fā)表
    主站蜘蛛池模板: 欧洲成人一区二区 | 在线亚洲欧美日韩 | 91亚洲免费视频 | 亚洲电影在线观看高清免费 | 国产一精品一av一免费爽爽 | 欧美成人精品一区 | 日韩精品久久久久久久九岛 | 黄色男女视频 | 亚洲射逼 | 国产精品伦视频看免费三 | 亚洲成人福利在线 | 色爱99| 久久性生活免费视频 | 国产福利视频在线观看 | 日美黄色片 | 亚洲午夜免费电影 | 成人啪啪18免费网站 | 国产精品视频六区 | 一级毛片电影网 | 女18一级大黄毛片免费女人 | 日韩精品免费一区二区三区 | 欧美aaaaa一级毛片在线 | 免费视频a | 在线看一区二区三区 | 一级做a爱片久久 | 精品无吗乱吗av国产爱色 | 色就操| 性大片免费看 | 激情小说激情图片激情电影 | 黄色大片在线免费观看 | 蜜桃久久一区二区三区 | 99精品视频一区二区三区 | 国产1区2区3区中文字幕 | 久久免费视频精品 | 中午日产幕无线码1区 | 日本精品网 | 7777视频| 免费观看一区 | 一级视频片 | 毛片大全在线观看 | lutube成人福利在线观看污 |