PHP數組
1.數字索引數組
1.1創建一個數組
php中最常用的兩個類型是:數組,字符串。數組也分為兩種,一種是數字索引,一種是關鍵是索引,關鍵字索引有點像python中字典的意思.
數字索引類型的數組的創建方法
$products = array( 'Tires', 'Oil', 'Spark Plugs' );
即使一個數組不存在,也可以直接對數組進行賦值操作,自然就產生了一個數組,例如下面這個等同於上面:
$products[0] = 'Tires'; $products[1] = 'Oil'; $products[2] = 'Spark Plugs';
1.2訪問數組元素
訪問的時候用下標來索引。
echo $products[0];
1.3使用循環訪問數組
循環訪問數組有for和foreach,一個是用在數字索引數組中,一個是用在關鍵字數組索引中
for($i=0; $i<3; $i++) { echo $products[$i]; }
2.非數字索引數組
2.1創建一個數組
創建一個關鍵字索引數組
$prices = array('Tires'=>100, 'Oil'=>10, 'Spark Plug'=>4);
用下面這個也是等價的
$prices['Tires'] = 100; $prices['Oil'] = 10; $prices['Spark Plugs'] = 4;
2.2訪問數組元素
訪問的時候把數字下標改成關鍵字即可
echo $prices['Tires'];
2.3使用循環訪問數組
用循環來處理關鍵字數組的時候有三種方法。foreach或list()或each()
先看foreach:
foreach ($prices as $key => $value) { echo $key."-".$value."<br />"; } foreach ($prices as $value) { echo $value }
第一個foreach中把數組$prices里面的元素按照一組一組分開,然后把美一組中的關鍵和值分別賦值給$key和$value;第二個是默認把值賦值給變量$value。
再看each():
while ($element = each($prices)){ echo $element['key'].'-'.$element['value']."<br />"; }
each()會每次傳遞給$element一對鍵值對,然后$element就變成了一個包含一個key元素和一個value元素的數組。each()和while連用
最后看list():
while (list($product,$price) = each($prices)) { echo "$product - $price<br />"; }
list()只不過把each()傳進來的一對鍵值對分別賦值給list().
3.數組操作符
數組只有一個聯合(+)操作符
$a+$b:數組$b被附加到$a中,但是任何關鍵字相同的元素將不會被添加,相當已一個集合,集合是不允許重復的。
4.多維數組
二維數組就是一個二位表。舉個二位數組的例子,其他的也類似:
$products = array( array('TIR', 'Tires',100), array('OIL', 'Oil', 10), array('SPK', 'Spark Plugs', 4) )
調用方法是:$products[0][1];
使用for循環的一個方法是:
for ($row=0;$row<3;$row++){ for($col=0;$col<3;$col++){ echo $products[$row][$col]; } echo "<br />"; }
關鍵字多維數組的方法類似。
5.數組排序
5.1三種排序函數sort(),asort(),ksort()
sort()函數是對數字索引數組進行排序的。按照字母升序進行排列的,大寫字母在小寫字母前面,接收參數為數組,還有一個可選參數,這個參數的值是:SORT_REGULAR(默認), SORT_NUMERIC,SORT_STRING。作用是按照數字和字符順序來排序。sourt($array);
asort()和ksort()分別是對關鍵字數組進行按照值和關鍵字進行排序。
asort()是對每個元素的值進行排序,ksort()是對元素關鍵字進行排序。
5.2反向排序
反向排序是將前面的三個函數的排序結果進行反序,從函數名字上來看,只需要在函數名上加一個r即可。
sort(),asort(),ksort()的反序分別對應:rsort(),arsort(),krsort().
多維數組的排序是需要自己設置比較函數的。
6.數組函數
在數組中常用的函數還有:
6.1在數組中瀏覽
每一個數組都有一個內部的指針來指向當前使用的是數組中的哪一個元素。
each()依次返回數組中的元素。
current()返回當前數組指針指向的一個元素,例如當對一個數組進行循環操作,在調用三個元素之后break,那么當前指針指向的就是第4個元素了,此時如果調用current(),那么就返回數組的第四個元素了。
reset()返回數組的第一個元素。
end()返回數組的最后一個元素。
6.2操作數組中的每一個元素
array_walk($array, func,agrv),以相同的方式修改數組中的每一個元素。
接收兩個參數,第三個為可選:
第一個參數是要操作的數組,第二個參數是操作的方法,可以是自定義的一個函數,第三個參數是函數需要傳入的參數。
6.3統計數組元素個數
count()和 sizeof()函數的作用和使用方法是一樣的,都是統計數組里面元素的個數。沒有區別
array_count_values()這個函數會統計每個特定的值在數組中出現的次數。