萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> PHP學習筆記之數組的定義、遍歷

PHP學習筆記之數組的定義、遍歷

php中數組是一個特殊的數據類型,可以說是對象也可說是存儲器了, 他裡面可以存儲php中其它數據類型的內容,如一個數組中可以有字符型,數字型,對象等等,下面我先來學習一下php數組的定義與遍歷查找吧。

① 創建數組第一種方法

$arr[0]=123;
$arr[1]=90;
….

概念:
[0] -> 這個我們稱為下標,或者稱為 關鍵字
$arr[0] -> 這個稱為數組的一個元素.
$arr[0]=123; 123 表示該$arr[0]元素對應的值
$arr –》這個是該數組的名稱.
☞在php數組中,元素存放的值可以是任意數據數據類型

② 創建數組的第二種方法

基本語法
$數組名=array(值1,值2,.......);
舉例說明:
$arr=array(1,90,"helllo",89.5);


③ 第三種方式創建數組(在默認情況下,我們的元素的下標,是從0開始給你編號,但是實際上,也可以自己指定)


基本語法$arr[‘logo’]=”北京”;
$arr[’hsp’]=123;
....
或者
$arr=array(”logo”=>”北京”,”hsp”=>123,4=>678);

數組的遍歷方法:


注: 如果使用 for while do..while 要確定該數組的下標是從 0開始順序排放
數組共有多少個元素,可以使用系統函數count

//

 代碼如下 復制代碼

for循環遍歷方法
for($i=0;$i<count($arr);$i++){
echo '<br/>'.$arr[$i];
}

//while循環遍歷方法
$i=0;//循環控制變量
while($i<count($colors)){
echo "<br/>".$colors[$i];
$i++;
}

//do..while
$i=0;//循環控制變量
do{
echo "<br/>".$colors[$i];
$i++;
}while($i<count($colors));

//foreach 遍歷方法
這個foreach適用范圍更廣
foreach($arr as $key=>$val){
echo $key."=".$val."<br/>";
}

php的數組相關的函數

①    count 函數
基本用法是
count($數組名); 可以統計該數組共有多少元素.
②    is_array
③    print_r 和 var_dump
④    explode 對字符串進行分割
案例:
$str="浙江&台州&杭州";
//在實際開發中,涉及到字符串的拆分,可以考慮
$arr=explode("&",$str);
print_r($arr);

數組查找

例子:

 代碼如下 復制代碼

<?php
$arr_a = array(0 => "a", 1 => "b", 2 => "c");
$key = array_search("a", $arr_a);
if( $key !== FALSE ){
    echo "鍵名為:$key";
} else {
    echo '無匹配結果';
}
?>

例子輸出結果如下:

鍵名為:0

array_key_exists()函數


如果在一個數組中找到一個指定的鍵,函數array_key_exists()返回true,否則返回false。其形式如下:

boolean array_key_exists(mixed key,array array);

下面的例子將在數組鍵中搜索apple,如果找到,將輸出這個水果的顏色:

 代碼如下 復制代碼

$fruit["apple"] = "red";
$fruit["banana"] = "yellow";
$fruit["pear"] = "green";
if(array_key_exists("apple", $fruit)){
 printf("apple's color is %s",$fruit["apple"]);
}

執行這段代碼得到的結果:

apple's color is red

合並數組
array_merge()函數將數組合並到一起,返回一個聯合的數組。所得到的數組以第一個輸入數組參數開始,按後面數組參數出現的順序依次迫加。其形式為:

Php代碼 
 
array array_merge (array array1 array2…,arrayN)

這個函數將一個或多個數組的單元合並起來,一個數組中的值附加在前一個數組的後面。返回作為結果的數組。

如果輸入的數組中有相同的字符串鍵名,則該鍵名後面的值將覆蓋前一個值。然而,如果數組包含數字鍵名,後面的值將不會覆蓋原來的值,而是附加到後面。

如果只給了一個數組並且該數組是數字索引的,則鍵名會以連續方式重新索引。

 代碼如下 復制代碼

<?php
$fruits = array("apple","banana","pear");
$numbered = array("1","2","3");
$cards = array_merge($fruits, $numbered);
print_r($cards);

// output
// Array ( [0] => apple [1] => banana [2] => pear [3] => 1 [4] => 2 [5] => 3 )
?>

 

2. 追加數組
array_merge_recursive()函數與array_merge()相同,可以將兩個或多個數組合並在一起,形成一個聯合的數組.兩者之間的區別在於,當某個輸入數組中的某個鍵己經存在於結果數組中時該函數會采取不同的處理方式.array_merge()會覆蓋前面存在的鍵/值對,替換為當前輸入數組中的鍵/值對,而array_merge_recursive()將把兩個值合並在一起,形成一個新的數組,並以原有的鍵作為數組名。還有一個數組合並的形式,就是遞歸追加數組。其形式為:

Php代碼 

array array_merge_recursive(array array1,array array2[…,array arrayN]) 
程序實例如下:

 代碼如下 復制代碼

<?php
$fruit1 = array("apple" => "red", "banana" => "yellow");
$fruit2 = array("pear" => "yellow", "apple" => "green");
$result = array_merge_recursive($fruit1, $fruit2);
print_r($result);

// output
// Array ( [apple] => Array ( [0] => red [1] => green ) [banana] => yellow [pear] => yellow )
?>   

現在鍵 apple 指向一個數組,這個數組由兩個顏色值組成的索引數組。

3. 連接數組
array_combine()函數會得到一個新數組,它由一組提交的鍵和對應的值組成。其形式為:

array array_combine(array keys,array values) 

注意,兩個輸入數組必須大小相同,不能為空。示例如下

 代碼如下 復制代碼


<?php
$name = array("apple", "banana", "orange");
$color = array("red", "yellow", "orange");
$fruit = array_combine($name, $color);
print_r($fruit);

// output
// Array ( [apple] => red [banana] => yellow [orange] => orange )
?>

 

4. 拆分數組 array_slice()

array_slice()函數將返回數組中的一部分,從鍵offset開始,到offset+length位置結束。其形式:

Php代碼 

array array_slice (array array, int offset[,int length])   

offset 為正值時,拆分將從距數組開頭的offset 位置開始;如果offset 為負值,則拆分從距數組末尾的offset 位置開始。如果省略了可選參數length,則拆分將從offset 開始,一直到數組的最後一個元素。如果給出了length 且為正數,則會在距數組開頭的offset+length 位置結束。相反,如果給出了length且為負數,則在距數組開頭的count(input_array)-|length|位置結束。考慮一個例子:

 代碼如下 復制代碼

<?php

$fruits = array("Apple", "Banana", "Orange", "Pear", "Grape", "Lemon", "Watermelon");
$subset = array_slice($fruits, 3);
print_r($subset);

// output
// Array ( [0] => Pear [1] => Grape [2] => Lemon [3] => Watermelon )
?>


數組排序(下面方法用於一維數組)

•sort() 函數用於對數組單元從低到高進行排序。
•rsort() 函數用於對數組單元從高到低進行排序。
•asort() 函數用於對數組單元從低到高進行排序並保持索引關系。
•arsort() 函數用於對數組單元從高到低進行排序並保持索引關系。
•ksort() 函數用於對數組單元按照鍵名從低到高進行排序。
•krsort() 函數用於對數組單元按照鍵名從高到低進行排序。

多維數組排序

比如有個多為數組:

 代碼如下 復制代碼

$arr = array(
‘d’ => array(‘id’ => 5, ‘name’ => 1, ‘age’ => 7),
‘b’ => array(‘id’ => 2,’name’ => 3,’age’ => 4),
‘a’ => array(‘id’ => 8,’name’ => 10,’age’ => 5),
‘c’ => array(‘id’ => 1,’name’ => 2,’age’ => 2)
);

需要對二維數組中的 age 項排序。

需要用到PHP的內置函數 array_multisort(),可以看手冊。

自定義函數:

 代碼如下 復制代碼

function multi_array_sort($multi_array,$sort_key,$sort=SORT_ASC){
if(is_array($multi_array)){
foreach ($multi_array as $row_array){
if(is_array($row_array)){
$key_array[] = $row_array[$sort_key];
}else{
return false;
}
}
}else{
return false;
}
array_multisort($key_array,$sort,$multi_array);
return $multi_array;
}

//處理

echo “<pre/>”;
print_r(multi_array_sort($arr,’age’));exit;

//輸出

Array
(
[c] => Array
(
[id] => 1
[name] => 2
[age] => 2
)

[b] => Array
(
[id] => 2
[name] => 3
[age] => 4
)

[a] => Array
(
[id] => 8
[name] => 10
[age] => 5
)

[d] => Array
(
[id] => 5
[name] => 1
[age] => 7
)

)

written by 大宇

copyright © 萬盛學電腦網 all rights reserved