三、數組

1、基本內容

  • range(low,high,[step]);函數,創建一個包含指定范圍的元素的數組。
    參數step:可選。規定元素之間的步進制。默認是 1。
    如:range(0,10,2);輸出以2遞增,到10結束的數組。
  • 循環輸出數組內容
$price['a'] = 100; 
$price['b'] = 10; 
$price['c'] = 4;
1-foreach()方法
foreach ($price as $key=>$value){
        echo $key." - ".$value."<br />";
    }
2-each()方法
while($element = each($price)){
        echo $element['key'];
        echo " -- ";
        echo $element['value'];
        echo "<br />";
    }
3-list()方法
reset($price);
使用each()函數時,數組將記錄當前元素,若要在相同的腳本中
多次使用該數組,應重置數組的指針到開始處
while(list($product,$pric) = each($price)){
        echo $product." - - ".$pric."<br />";
    }
list()可以重命名數組的key和value值,該函數只使用于數字索引的數組,且默認從0開始
  • 二維數組
$products = array(
            array('Code' => 'TIR',
                    'Desc' => 'Tires',
                    'Price' => 100
            ),
            array('Code' => 'OIL',
                    'Desc' => 'Oil',
                    'Price' => 10
            ),
            array('Code' => 'SPK',
                    'Desc' => 'Spark Plugs',
                    'Price' => 4
            ),
    );
    for($row=0; $row<3; $row++){
        while(list($key, $value) = each($products[$row])){
            echo " |$value";
        }
        echo " |<br />";
    }
輸出:
|TIR |Tires |100 |
|OIL |Oil |10 |
|SPK |Spark Plugs |4 |
  • 數組排序(一維數組和多維數組)
  • 一維數組的一些排序函數
    1、適用于無關聯的數組,如一維數字索引數組
$arr = array('Tir','Oil' ,'Spk' ,);
sort(arr,[sortingtype]); 函數對索引數組進行升序排序
如果成功則返回 TRUE,否則返回 FALSE
參數sortingtype:可選。規定如何比較數組的元素/項目
0 = SORT_REGULAR - 默認。把每一項按常規順序排列
1 = SORT_NUMERIC - 把每一項作為數字來處理
2 = SORT_STRING - 把每一項作為字符串來處理。

2、適用于關聯數組的排序如一維關聯數組

$arr = array('Tir' => 100,'Oil' => 10,'Spk' => 4,);
asort();ksort();
若用關聯數組存儲各個項目和它們的價格,
就需要用不同的排序函數使關鍵字和值在排序時仍然保持一致。
asort();將數組的value值升序排序
ksort();將數組的key值升序排序

3、反向排序

對應于 sort(),asort(),ksort(),反向排序函數依次為
rsort(),arsort(),krsort(),使數組降序排序。
  • 多維數組排序usort()
usort();用例:
    $products = array(
            array('Code' => 'TIR',
                    'Desc' => 'Tires',
                    'Price' => 100
            ),
            array('Code' => 'OIL',
                    'Desc' => 'Oil',
                    'Price' => 10
            ),
            array('Code' => 'SPK',
                    'Desc' => 'Spark Plugs',
                    'Price' => 4
            ),
    );
    usort($products, "usortRank");
    function usortRank($a,$b){
        $a1 = $a['Price'];
        $b1 = $b['Price'];
        if($a1 == $b1){
            return 0;
        }
        return ($a1>$b1 ?  1:-1);
    }
    print_r($products);

類似于asort()和ksort()對應有uasort()和uksort()

  • 對數組進行重新排序
    shuffle()函數將數組次序隨機打亂;
    array_reverse()給出一個原數組的反向排序
    array_push()函數將每個新元素添加到數組的末尾
    array_pop()函數刪除并返回數組末尾的一個元素
  • explode()函數:將字符串打散為數組
explode(separator,string,limit);
*separator*必需。規定在哪里分割字符串。
*string*必需。要分割的字符串。
*limit*可選。規定所返回的數組元素的數目。
可能的值:
大于 0 - 返回包含最多 *limit* 個元素的數組
小于 0 - 返回包含除了最后的 -*limit* 個元素以外的所有元素的數組
0 - 返回包含一個元素的數組
如:
$str = 'one,two,three,four';
print_r(explode(',',$str));輸出結果為:Array ( [0] => one [1] => two [2] => three [3] => four)
print_r(explode(',',$str,0));輸出結果為:Array ( [0] => one,two,three,four )
print_r(explode(',',$str,2));輸出結果為:Array ( [0] => one [1] => two,three,four )
print_r(explode(',',$str,-1));//返回不包含最后一個元素的數組
即 Array ( [0] => one [1] => two [2] => three )
  • 數組中瀏覽
each() 函數返回當前元素的鍵名和鍵值,并將內部指針向前移動
current() - 返回數組中的當前元素的值
end() - 將內部指針指向數組中的最后一個元素,并輸出
next() - 將內部指針指向數組中的下一個元素,并輸出
prev() - 將內部指針指向數組中的上一個元素,并輸出
reset() - 將內部指針指向數組中的第一個元素,并輸出
--
$arrTest = range(1, 10);
print_r(each($arrTest));
//Array ( [1] => 1 [value] => 1 [0] => 0 [key] => 0 )
--2
    $people = array("Bill", "Steve", "Mark", "David");
    reset($people);
    while (list($key, $val) = each($people)){
        echo "$key => $val<br>";
    }
--例子
    <?php
    $people = array("Bill", "Steve", "Mark", "David");
    echo current($people) . "<br>"; // 當前元素是 Bill
    echo next($people) . "<br>"; // Bill 的下一個元素是 Steve
    echo current($people) . "<br>"; // 現在當前元素是 Steve
    echo prev($people) . "<br>"; // Steve 的上一個元素是 Bill
    echo end($people) . "<br>"; // 最后一個元素是 David
    echo prev($people) . "<br>"; // David 之前的元素是 Mark
    echo current($people) . "<br>"; // 目前的當前元素是 Mark
    echo reset($people) . "<br>"; // 把內部指針移動到數組的首個元素,即 Bill
    echo next($people) . "<br>"; // Bill 的下一個元素是 Steve
    print_r (each($people)); // 返回當前元素的鍵名和鍵值(目前是 Steve),并向前移動內部指針
    ?>
  • array_walk($arr, $func, [userdata...])
    對數組中的元素運用自定義函數,在函數中,數組的鍵名和鍵值是參數
       $arrTest = range(1, 10);
    function my_print(&$value,$key,$factor){
        echo $value *= $factor;
        echo "<br />";
    }
    array_walk($arrTest, 'my_print', 3);
    echo "<hr/>";
    print_r($arrTest);
這里的&符號是引用傳值,將數組的每個元素的值都乘以3。
  • extract($arr, $extract_rules, $prefix)
    該函數對數組鍵名作為變量名,使用數組鍵值作為變量值
*array*
必需。規定要使用的數組。
*extract_rules*
可選。extract() 函數將檢查每個鍵名是否為合法的變量名,同時也檢查和符號表中已存在的變量名是否沖突。對不合法和沖突的鍵名的處理將根據此參數決定。
可能的值:
EXTR_OVERWRITE - 默認。如果有沖突,則覆蓋已有的變量。
EXTR_SKIP - 如果有沖突,不覆蓋已有的變量。
EXTR_PREFIX_SAME - 如果有沖突,在變量名前加上前綴 *prefix*。
EXTR_PREFIX_ALL - 給所有變量名加上前綴 *prefix*。
EXTR_PREFIX_INVALID - 僅在不合法或數字變量名前加上前綴 *prefix*。
EXTR_IF_EXISTS - 僅在當前符號表中已有同名變量時,覆蓋它們的值。其它的都不處理。
EXTR_PREFIX_IF_EXISTS - 僅在當前符號表中已有同名變量時,建立附加了前綴的變量名,其它的都不處理。
EXTR_REFS - 將變量作為引用提取。導入的變量仍然引用了數組參數的值。
-
*prefix*
可選。請注意 *prefix* 僅在 *extract_type* 的值是 EXTR_PREFIX_SAME,EXTR_PREFIX_ALL,EXTR_PREFIX_INVALID 或 EXTR_PREFIX_IF_EXISTS 時需要。如果附加了前綴后的結果不是合法的變量名,將不會導入到符號表中。
前綴和數組鍵名之間會自動加上一個下劃線
1-
    $arr = array('k1'=>'v1','k2'=>'v2','k3'=>'v3');
    extract($arr);
    echo $k1;//輸出v1
2-
    $k1 = 'bv';
    $arr = array('k1'=>'v1', 'k2'=>'v2', 'k3'=>'v3');
    extract($arr, EXTR_PREFIX_SAME, 'same');
    echo "$k1 , $k2 , $k3 , $same_k1";
    //輸出 bv , v2 , v3 , v1
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,501評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,673評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,610評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,939評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,668評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,004評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,173評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,705評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,426評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,656評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,833評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,247評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,580評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,371評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,621評論 2 380

推薦閱讀更多精彩內容