第5章 陣列

2021-08-03 02:51:59 字數 4501 閱讀 8385

一、認識陣列

傳統上把陣列(array)定義為一組有某種共同特性的元素,包括相似性和型別。每個元素由乙個特殊的識別符號來區分,稱之為鍵(key);而每個鍵對應乙個值(value)。

$usernames=array('李彥巨集','馬雲','馬化騰');//定義乙個陣列

預設情況下以數字作為索引的鍵名(從0開始),usernames[0]表示李彥巨集

range()方法也可以定義陣列

$numbers=range(1,10);

$letters=range('a','z');

$numbers=range(1,10,2);//第三個引數表示步長

二、訪問陣列

一般地遍歷陣列採用foreach迴圈(注意:foreach屬於語法結構),陣列索引陣列可以用for迴圈遍歷

for($i=0;$i

foreach($numbers=>value)

三、自定義鍵陣列(關聯陣列)

<?php

// 初始化關聯陣列

$ages=array('何健'=>92,'建行'=>91);

// 訪問陣列元素

$ages['何健'];

// 新增陣列元素

$ages['王鵬']=95;

// 現在陣列的的元素變成了三個

echo count($ages);

// 也可以直接新增陣列

$prices['觀陵山']=9800;

$prices['大河貝']=9900;

$prices['聖河山']=6900;

// $prices這個陣列變數被自動建立出來

?>

foreach遍歷關聯陣列

foreach($age as $key=>$value)

each返回陣列中當前的鍵/值對並將陣列指標向前移動一步

<?php

$foo=array("robert"=>"bob","seppo"=>"sepi");

$bar=each($foo);

$bar2=each($foo);

print_r($bar);

print_r($bar2);

?>

list把陣列中的值賦給一些變數

<?php

$color=array('red','white','blue');

list($a,$b,$c)=$color;

echo $a;

?>

注意list()無法識別字串key

each經常和list結合使用

<?php

$ages=array('建行'=>91,'何健'=>92,'王鵬'=>95);

while (list($k,$v)=each($ages))

?>

當時用each()函式時,陣列將記錄當前元素。如果希望在相同的指令碼中兩次使用該陣列,就必須使用reset()將當前元素重新設定到陣列開始處。

reset($ages)

確定唯一的陣列元素:array_unique();刪除掉陣列裡相同值得元素

置換陣列鍵和值:array_flip();它會對調陣列中的key和value;

<?php

$ages=array('建行'=>91,'何健'=>92,'王鵬'=>95,'馬簫'=>91);

while (list($k,$v)=each($ages))

print_r(array_unique($ages));//重複的元素中後面的被刪掉

print_r(array_flip($ages));//重複的元素中前面的被刪掉

?>

四、多維陣列

<?php

// 多維陣列

$products=array(

array('蘋果',6,5.32),

array('橘子',3,3.1),

array('香蕉',5,4.3)

);// 雙重for迴圈遍歷這個陣列

for ($i=0; $i < count($products); $i++)

echo "";}

// 將上面的陣列變成關聯陣列

$products1=array(

array('名稱'=>'蘋果','數量'=>6,'**'=>5.32),

array('名稱'=>'橘子','數量'=>3,'**'=>3.1),

array('名稱'=>'香蕉','數量'=>5,'**'=>4.3)

);// 這種情況就不能再使用雙重for迴圈來遍歷

for ($i=0; $i < count($products1); $i++)

echo "";}

// 或者使用each()和list()結合的方法

for ($i=0; $i < count($products1); $i++)

echo "";}

?>

五、陣列排序

對陣列中的相關資料進行排序是一件非常有意義的事

1.sort()公升序排序

print_r($products);

echo "

";// 使用sort()將陣列按照字母公升序進行排序

sort($products);//原陣列排序方式改變

print_r($products);

// 使用sort()函式將數字公升序排序

$prices=array(100,10,4,23,78);

sort($prices);

sort()函式的第二個引數是可選的sort_tegular(預設值)、sort_numeric或sort_string,用來制定排序的型別

print_r($prices);

echo "

";sort($prices,sort_string);//與預設的排序結果不一樣

print_r($prices);

2.asort()對陣列進行公升序排序並保持索引關係

$products=array("c"=>"觀陵山","a"=>"菩遙山","b"=>"大河貝");

asort($products);

print_r($products);//按鍵值拼音的先後順序排序

3.ksort()按鍵名的公升序排序

$products=array("c"=>"觀陵山","a"=>"菩遙山","b"=>"大河貝");

ksort($products);//按鍵名排序

print_r($products);

4.反向排序:rsort()、arsort()和krsort()

5.再一些應用中,可能希望按照另一種方式對陣列排序。函式shuffle()將陣列的元素進行隨機排序。函式array_reverse()給出乙個原來陣列的反向排序。

$products=array("a"=>"觀陵山","b"=>"菩遙山","c"=>"大河貝","d"=>"龍生","e"=>"永樂青山");

shuffle($products);//隨機排序,所以變成數字形式

print_r($products);

echo "

";$newarr=array_reverse($products);//不能改變原陣列的情況

print_r($newarr);

六、陣列的指標操作

// current(),next(),prev(),end()

$transport=array('foot','bike','car','plane');

$mode=current($transport);//$mode='foot'

$mode=next($transport);//$mode='bike'

$mode=current($transport);//$mode='bike'

$mode=prev($transport);//$mode='foot'

$mode=end($transport);//$mode='plane';

// each()也運算元組的指標但是與next()有所不同,前者再指標移動之前返回當前元素,而後者先將指標前移,在返回當前元素

// pos()是current()的別名陣列

// reset()重置相當於指標回到最初的位置

七、統計陣列個數

count()和sizeof()統計陣列下標的個數,返回數值型別

array_count_values()統計陣列內下標值的個數,返回的是乙個陣列

八、將陣列轉化成標量變數:extract()

第5章 陣列

陣列是一種常用的資料結構。高階程式設計評議都提供了支援陣列的基本方法。陣列分靜態陣列和動態陣列。靜態陣列和動態陣列的實現機制相似,只是在程式設計時向系統申請內在空間的時間不同。陣列是n n 1 個相同資料型別的資料元素a0,a1,a2,a n 1 構成的占用一塊位址連續的記憶體單元有限序列。資料集合...

第5章 陣列

1 陣列 指的是把一組相同資料型別,並且有相同含義資料放到乙個陣列變數中。1 定義 陣列是乙個變數,儲存相同資料型別的一組資料。2 宣告 宣告乙個陣列就是在記憶體空間劃出一串連續的空間 3 陣列的結構和基本要素 識別符號 陣列的名稱,用於區分不同的陣列。陣列只有乙個名稱 陣列元素 向陣列中存放的資料...

5 第 5 章 迴圈

1.可以用迴圈來驗證輸入。在迴圈前的第一次讀取操作,稱為啟動讀取,如果後續還需要繼續讀取,則語句應該在迴圈中。2.在實際程式設計應用中,不建議在 cout 語句中放置遞增或遞減運算子 因為容易出錯 3.需要計數時使用計數器,需要累計彙總時使用累加器。4.標記符號是乙個特殊值,指示著值列表的結尾。一般...