1. 程式人生 > >PHP系列(三)PHP數組與數據結構

PHP系列(三)PHP數組與數據結構

php數組與數據結構

PHP數組與數據結構

數組是把若幹變量按有序的形式組織起來的一種形式。

這些數據元素的集

數組分為一維二維三維、索引數組(數組索引是整數)和關聯數組

1)數組的聲明

1、一個數組中存的多個內容、數組中的內容叫作“元素”

2、每個元素都是由健和值組成的Key/value

$a=array(“one”=>”111”,”two”=>”2222”);

3、下標有二種類型:一種是整數(索引數組)、一種是字符串(關聯數組)

4[]{}來操作下標

5、在使用下標時、如果是關聯數組、一定要使用引號、不要使用常量名稱(各種類型都可以作下標、但會強制轉換)

6、數組的自動增漲下標、默認從

0開始、出現最大值加1

7、關聯數組的字符串下標、不影響索引下標的排列規則

8、使用array()函數聲明數組、默認索引下標從0開始

9、使用=>符號指定下標

Php5.4以後可以像其他語言一樣聲明數組$arr=[“a”,”bb”];

10、刪除數組中的一個元素使用unset(但不會重建索引)刪除後重建用array_values()函數

二維數組(數組的數組)三維數組 $group=array(array(“1”,”2”), array(“1”,”2”),)

2for循環遍歷數組

當數組下標不是連續的時候、For循環遍歷不了數組

$arr=array(“aa”,”bb”,”cc”);

For($i=0;$i<count($arr);$i++){

Echo$arr[$i].”<br>”;

}

3foreach循環遍歷

數組有多少個元素、foreach就循環多少次

Foreach(數組 as自定義變理){

}

Foreach(數組 as 下標變理()=>自定義變理()){

}

$arr=array(“11”,”bb”);

Foreach($arras $key => $values){

Echo “{$key}====>{$values}”

}

$arr= array(

array("name"=>"ssw","age"=>22, "性別"=>"sex"),

array("name"=>"ssw1","age"=>29, "性別"=>"six"),

array("name"=>"ssw2","age"=>26, "性別"=>"sex")

);

echo"<table border=‘1‘ width=‘200‘>";

echo"<caption>數組轉為表格</caption>";

foreach($arras $row){

echo "<tr>";

foreach($row as $col){

echo"<td>".$col."</td>";

}

echo "</tr>";

}

echo"</table>";

(4)聯合使用list() each() while()循環遍歷使用

List()作用:

1、等號左邊用list()函數、等號右邊只能是一個數組

2、數組中有幾個元素、在list()中就用幾個參數、而且參數必須是變量、不能是值

3、只能將索引數組(下標是連續)、轉為變理、是按下標0開始找的

4、可以在list()參數中通過、空項選擇性接收數組中的元素

$str=”天涯_海角”;

List($name,$sea)=explode(“_”,$str);

Echo $name;

Echo $sea;

天涯

海角

Each()是一個函數、參數為數組、返回值也是一個數組

1、返回值是一個數組、數組有4個固定元素、下標固定的1 value 0 下標key下標

2each()只處理當前元素、將當前元素轉為數組信息、處理完後、指針向下一個元素移動

3、如果指定已經結束了、在使用each()獲取元素、返回false

$arr =array("one"=>"Thinkphp","two"=>"Yii", "three"=>"smarty");

while(list($key,$val) = each($arr)){

echo"{$key}=>{$val}<br>";

}

顯示:

one=>Thinkphp

two=>Yii

three=>smarty

5)數組內部指針遍歷數組

控制指定的位置next(下一個) prev(上一個) end(最後一個) reset(第一個)

Key()獲取數組當前下標 current()獲取數組當前值

$arr =array("one"=>"Thinkphp","two"=>"Yii", "three"=>"smarty");

Echo “當前位置:” . ”key($arr)”. ”==>” . ”current($arr)” . ”<br>”;

(6)php超全局數組

超全局數組(變量)在系統中已預定好的、可以直接調用

$_SERVER 服務器變量

$_ENV 環境變量

$_GET http get變量 接收用戶通過url向服務器傳的參數

$_POST http post變量 接收用戶通過http協議向服務器傳的參數

$_REQUEST request變量 此關聯數組包含$_GET $_POST$_COOKIE中全部內容

$_FILES http文件上傳變量

$_COOKIE http cookies

$_SESSION session變量

$_GLOBALS global變量

Print_r($_SERVER);

7PHP常用數組函數

數組的鍵值操作函數(函數主要看功能 返回值)

Array_values()返回數組中所有的值,返回數組。

$sh=array(“shang”=>”上海”,””=>”海南”);

Print_r(Array_values($sh));

顯示為:Array ( [0] => ”上海” [1] => ”海南” )

Array_keys(array,value,strict)返回數組中所有的鍵,返回數組。

Array為數組 value可選指定鍵值、然後只有該鍵值對應的鍵名被返回

Strict 可選 true 依賴類型 faLse不依賴類型

<?php

$a=array(10,20,30,"10");

print_r(array_keys($a,"10",true));

?>

顯示為:Array ( [0] => 3 )

In_array(search, array,type)搜索數組中是否存在指定的值,返回真假。

Search 必需、規定要在數組搜索的值

Array 必需、規定要搜索的數組

Type 可選、設置該參數為 true,則檢查搜索的數據與數組的值的類型是否相同。

$sh=array(“shang”=>”上海”,””=>”海南”);

If(in_array(“上海”, $sh)){

Echo“在數組中

}else{

Echo“不在數組中”:

}

顯示:在數組中

array_search(search,array, type)函數在數組中搜索某個鍵值,並返回對應的鍵名,如果沒找到,則返回 false

Search 必需、規定要在數組搜索的值

Array 必需、規定要搜索的數組

Type 可選、設置該參數為 true,則檢查搜索的數據與數組的值的類型是否相同。

$a=array("a"=>"5","b"=>5,"c"=>"5");

echoarray_search(5,$a,true);

顯示:b

Array_key_exists(search, array, type)搜索數組中是否存在指定的鍵,返回真假。

Search 必需、規定要在數組搜索的值

Array 必需、規定要搜索的數組

Type 可選、設置該參數為 true,則檢查搜索的數據與數組的值的類型是否相同。

$a=array("a"=>"5","b"=>5,"kong"=>null);

If(array_key_exists(“kong”, $a)){

Echo“在數組中

}else{

Echo“不在數組中”:

}

顯示:在數組中

Array_flip(array)交換數組中所有的鍵名以及它們關聯的鍵值、返回數組(只能處理整數和字符串)

$a=array("a"=>"5","b"=>5,"c"=>"cisoco");

print_r(array_flip($a));

顯示:Array ( [5] => b [cisoco] => c ) //重復下標會被後面相同鍵名的覆蓋

Array_reverse(array,preserve)將原數組中的元素順序翻轉,創建新的數組並返回

Array 必需、規定數組

Preserve可選(true/false)規定是否保留原始數組的鍵名

$a=array("a","b","c");

$reverse=array_reverse($a);

$preserve=array_reverse($a,true);

print_r($a);

echo"<br>";

print_r($reverse);

echo"<br>";

print_r($preserve);

顯示為:

Array( [0] => a [1] => b [2] => c )
Array ( [0] => c [1] => b [2] => a )

Array ( [2] => c [1] => b [0] => a )

統計數組元素的個數與唯一性

Count(array,mode)返回數組中元素的數目(strlen是統計字符串長度)

Array 必需、規定數組

Mode 可選、0為不對多維數組統計、1遞歸統計數組中的元素

$cars=array

(

"Volvo"=>array( "XC60", "XC90"),

"BMW"=>array("X3","X5"),

"Toyota"=>array("Highlander")

);

echo "常規計數:" .count($cars)."<br>";

echo "遞歸計數:" .count($cars,1);

顯示為:

常規計數:3
遞歸計數:8

Array_count_values(array)統計數組中所有值出現的次數、返回一個數組

$a=array("A","Cat","Dog","A","Dog");

print_r(array_count_values($a));

顯示為:

Array ( [A] => 2 [Cat] => 1 [Dog] => 2 )

Array_unique(array)移除數組中的重復的值,並返回結果數組

當幾個數組元素的值相等時,只保留第一個元素,其他的元素被刪除

$a=array("a"=>"red","b"=>"green","c"=>"red");

print_r(array_unique($a));

顯示為:Array ( [a] => red [b] => green )

使用回調函數處理數組的函數

Array_filter(array,callbackfunction);用回調函數過濾數組中的值、返回原數組

Callbackfunction 必需 規定要使用的回調函數

$arr = array(1,3,4,false,-2,-1,-6,null,-8);

var_dump(array_filter($arr));

echo "<br>";

function myfun($value){

if($value>= 0)

returntrue;

else

returnfalse;

}

var_dump(array_filter($arr,"myfun"));

var_dump(array_filter($arr,function($value){

return!($value%2==0);

}));

顯示為:

array(7){ [0]=> int(1) [1]=> int(3) [2]=> int(4) [4]=> int(-2) [5]=>int(-1) [6]=> int(-6) [8]=> int(-8) }
array(5) { [0]=> int(1) [1]=> int(3) [2]=> int(4) [3]=> bool(false)[7]=> NULL }

array_walk(array,myfunction, userdata)對數組中的每個元素應用用戶自定義函數。在函數中,數組的鍵名和鍵值是參數

array必需。規定數組。

myfunction必需。用戶自定義函數的名稱。

Userdata可選。規定用戶自定義函數的參數

事例一:

$arr = array(1,2,3,4,5);

function myfun(&$value){

$value=$value*$value;

}

print_r($arr);

echo "<br>";

array_walk($arr,"myfun");

print_r($arr);

顯示為:

Array( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 )
Array ( [0] => 1 [1] => 4 [2] => 9 [3] => 16 [4] => 25 )

事例二:

$_arr = array(22,44,66,76,43,24);

array_walk($_arr, function($value,$key){

var_dump($value, $key);

echo"<br>";

});

顯示:int(22) int(0)

int(44) int(1)

int(66) int(2)

int(76) int(3)

int(43) int(4)

int(24) int(5)

事例三:

$arr =array("one"=>1,"two"=>2,"three"=>3,"four"=>4,"five"=>5);

function myfun($key,$value){

echo"{$key}===={$value}<br>";

}

array_walk($arr,"myfun");

顯示為:

1====one
2====two
3====three
4====four
5====five

事例四:

$arr =array("one"=>1,"two"=>2,"three"=>3,"four"=>4,"five"=>5);

array_walk($arr, function($v,$k,$str){

echo"{$k} {$str} {$v}<br>";

}, "++++");

print_r($arr);

echo "<br>";

顯示為:

1++++one
2++++two
3++++three
4++++four
5++++five

Array_map(callback,$array1,$array2)將回調函數作用到給定數組的單元上、返回一個數組。

callback 回調函數

array 為數組

$arr=array(1,2,3,4);

$brr=array("one","two");

function myfun($v,$bv){

echo" $v --- $bv <br>";

return1;

}

$rarr = array_map("myfun",$arr,$brr);

print_r($rarr);

顯示為:

1--- one
2 --- two

3 ---

4 ---

Array ( [0] => 1 [1] => 1 [2] => 1 [3] => 1 )

$arr=array(1,2,3);

$brr=array("one","two");

$rarr = array_map(null,$arr,$brr);

echo "<pre>";

print_r($rarr);

echo "</pre>";

顯示為:

Array
(
   [0] => Array
        (
            [0] => 1
            [1] => one
        )
    [1] => Array
        (
            [0] => 2
            [1] => two
        )
    [2] => Array
        (
            [0] => 3
            [1] =>
        )
)

數組的排序函數

1、冒泡法進行排序實例

代碼:

<?php

/**

* PHP中的冒泡排序法使用

*/

// 預先聲明一個數組

$arr= array(12,45,28,30,88,67);

echo"原數組";

print_r($arr);

echo"<br/>";

//冒泡排序

functionmaopao($arr){

// 進行第一層遍歷

for($i=0,$k=count($arr);$i<$k;$i++) {

// 進行第二層遍歷將數組中每一個元素都與外層元素比較

// 這裏的i+1意思是外層遍歷當前元素往後的

for($j=$i+1;$j<$k;$j++) {

// 內外層兩個數比較

if($arr[$i]<$arr[$j]){

// 先把其中一個數組賦值給臨時變量

$temp= $arr[$j];

// 交換位置

$arr[$j] = $arr[$i];

// 再從臨時變量中賦值回來

$arr[$i] = $temp;

}

}

}

// 返回排序後的數組

return$arr;

}

// 直接打印排序後的數組

echo排序後‘;

print_r(maopao($arr));

2、二分法進行排序實例

$arr = array(20,18,12,9,45,34,28,22,99);

function qsort($arr){

if(!is_array($arr)|| empty($arr))

returnarray();

//獲取數組的長度

$len= count($arr);

//如果數組中只有一個元素、直接返回這個數組

if($len<= 1)

return$arr;

$key[0]= $arr[0];

$left= array();

$right= array();

for($i=1;$i<$len;$i++){

if($arr[$i]<= $key[0]){

$left[]=$arr[$i];

}else{

$right[]= $arr[$i];

}

}

$left=qsort($left);

$right=qsort($right);

returnarray_merge($left,$key,$right);

}

print_r($arr);

echo "<br>";

print_r(qsort($arr));

顯示:

Array( [0] => 20 [1] => 18 [2] => 12 [3] => 9 [4] => 45 [5] => 34[6] => 28 [7] => 22 [8] => 99 )
Array ( [0] => 9 [1] => 12 [2] => 18 [3] => 20 [4] => 22 [5]=> 28 [6] => 34 [7] => 45 [8] => 99 )

3、數組排序系統函數

Sort() 對數組進行升序排序、排列後數組被賦予新的鍵名、成功返加true、失敗false

Rsort() 對數組進行降序排序、排列後數組被賦予新的鍵名、成功返加true、失敗false

$arr = array(20,18,12,9,45,);

sort($arr);

print_r($arr);

顯示為:

Array( [0] => 9 [1] => 12 [2] => 18 [3] => 20 [4] => 45 )

Ksort() 對數組按照鍵名排序、成功,返回 TRUE,否則返回 FALSE

Krsort()對數組按照鍵名逆向排序、成功,返回 TRUE,否則返回 FALSE

Asort() 對數組進行排序並保持索引關系、、成功,返回 TRUE、失敗 FALSE

Arsort() 對數組進行逆向排序並保持索引關系、、成功,返回 TRUE、失敗 FALSE

Natsort() 自然順序算法對給定數組中的元素排序、保留原始的鍵名、成功,返回 TRUE、失敗 FALSE

Natcasesort()自然順序算法對給定數組中的元素排序、不區分大小寫、保留原始的鍵名、成功,返回 TRUE、失敗 FALSE

Usort() 使用用戶自定義的比較函數對數組中的值進行排序、成功,返回 TRUE、失敗 FALSE

Uasort()使用用戶自定義的比較函數對數組中的值進行排序並保持索引關系、成功,返回 TRUE、失敗 FALSE

Uksort()使用用戶自定義的比較函數對數組中的鍵進行排序、成功,返回 TRUE、失敗 FALSE

$data = array("FILE32.TXT","file.txt","file11.txt");

usort($arr, function($a,$b){

$alen= strlen($a);

$blen= strlen($b);

if($alen> $blen){

return1;

}elseif($alen< $blen){

return-1;

}else{

return0;

}

});

print_r($arr);

Array_multisort()對多個數組或多維數組進行排序、成功,返回 TRUE、失敗 FALSE

$data = array(

array("id"=>1,"name"=>"aa", "age"=>10),

array("id"=>2,"name"=>"ww", "age"=>30),

array("id"=>3,"name"=>"cc", "age"=>30),

array("id"=>4,"name"=>"dd", "age"=>40),

);

$ages = array();

$names = array();

foreach($data as $value){

$ages[]= $value["age"];

$names[]= $value["name"];

}

array_multisort($ages,SORT_DESC,$name,SORT_DESC,$data);

echo "<pre>";

print_r($data);

echo "</pre>";

顯示為:

Array

(

[0]=> Array

(

[id] => 1

[name] => aa

[age] => 10

)

[1]=> Array

(

[id] => 2

[name] => ww

[age] => 30

)

[2]=> Array

(

[id] => 3

[name] => cc

[age] => 30

)

[3]=> Array

(

[id] => 4

[name] => dd

[age] => 40

)

)

拆分、合並、分解與結合數組

Array_slice(array,start,length,preserve)在數組中根據條件取出一段值,並返回數組

Array 必需、數組

Start 必需、開始、0第一個元素

Length 可選、取數組的長度

Preserve 可選、true保留鍵名、false重置鍵名

$data =array("a","b","c","d","e");

$arr = array_slice($data,-3,2,true);

print_r($arr);

顯示為:Array ( [2] => c [3]=> d )

array_splice(array,start,length,array)從數組中移除元素,並用新元素取代它,該函數也將返回包含被移除元素的數組

Array 必需、數組

Start 必需、開始、0第一個元素

Length 可選、取數組的長度

Array 插入數組

$data =array("a","b","c","d","e");

$arr =array_splice($data,-3,2,array("hhhh","wwww"));

print_r($arr); //該函數也將返回包含被移除元素的數組

echo "<br>";

print_r($data);

顯示為:

Array( [0] => c [1] => d )
Array ( [0] => a [1] => b [2] => hhhh [3] => wwww [4] => e )

Array_combine (keys,values);通過合並兩個數組來創建一個新數組,其中的一個數組是鍵名,另一個數組的值為鍵值、鍵名數組和鍵值數組的元素個數必須相同、不同返回false

Keys必需。鍵名數組

Values必需。鍵值數組。

$key =array("a","b","c","d","e");

$value = array(11,22,33,44,55);

$all = array_combine($key,$value);

print_r($all);

顯示為:

Array( [a] => 11 [b] => 22 [c] => 33 [d] => 44 [e] => 55 )

Array_merge(array1,array2,array3...)把一個或多個數組合並為一個數組如果兩個或更多個數組元素有相同的鍵名,則最後的元素會覆蓋其他元素果您僅向函數輸入一個數組,且鍵名是整數,則該函數將返回帶有整數鍵名的新數組,其鍵名以 0 開始進行重新索引

$a =array("a","one"=>"b","c");

$b = array(10,"one"=>11,12);

$c = array_merge($a , $b);

print_r($c);

顯示為: //下標相同的會覆蓋、是前面的覆蓋後面的

Array( [0] => a [one] => 11 [1] => c [2] => 10 [3] => 12 )

$a =array("a",5=>"b","c"); //只輸入一個數組

$c = array_merge($a);

print_r($c);

顯示為:Array ( [0] => a [1]=> b [2] => c )

Array_intersect()計算數組的交集、返回數組的鍵名保留不變

Array_diff()計算數組差集、返回的數組中,鍵名保持不變

桟和隊列

桟:先進後出(子彈夾)

入棧:array_push,在桟尾放入元素!

出棧:array_pop在桟尾刪除元素

隊列,先進先出

入隊列:array_push()在數組的尾端將數據壓入數組

出隊列:array_shift();在數組的頂端,將數據取出

array_unshift()可以將數據由數組的頂端壓入數組!

事例:

$a=array("a"=>"red","b"=>"green");

array_push($a,"blue","yellow");

print_r($a);

array_pop($a);

echo "<br>";

print_r($a);)

顯示為:

Array( [a] => red [b] => green [0] => blue [1] => yellow )
Array ( [a] => red [b] => green [0] => blue )

事例:

$a=array("a"=>"red","b"=>"green","c"=>"blue");

echoarray_shift($a);

echo"<br>";

print_r ($a);

顯示為

red
Array ( [b] => green [c] => blue )

事例:

$a=array("a"=>"red","b"=>"green");

array_unshift($a,"blue");

print_r($a);

顯示為

Array ( [0] =>blue [a] => red [b] => green )

其他有用的數組處理函數

Array_rand (array,number)函數從數組中隨機選出一個或多個元素,並返回鍵名的數組

Number可選。規定返回多少隨機鍵名

$a =array("red","green","linux");

print_r(array_rand($a,1));

顯示為:Array ( [0] => 0 [1]=> 2 )

Shuffle(array)把數組中的元素按隨機順序重新排序、返回bool型。該函數為數組中的元素分配新的鍵名。已有鍵名將被刪除

$a =array("r"=>"red","g"=>"green","l"=>"linux");

shuffle($a);

print_r($a);

顯示為:Array ( [0] => red [1]=> linux [2] => green )

Array_sum(array)計算數組中所有值的和

$a=array("a"=>5,"b"=>13);

echo array_sum($a);

顯示為:18

Range (low,high,step)創建一個包含指定範圍的元素的數組

Low必需。規定數組的最低值。

High必需。規定數組的最高值。

Step可選。規定元素之間的步進制。默認是 1

$number= range(0,50,10);

print_r($number);

顯示為:Array ( [0] => 0 [1] => 10 [2] => 20 [3]=> 30 [4] => 40 [5] => 50 )

Array_fill (index,number,value);用給定的值填充數組,返回的數組有 number個元素,值為 value

Index必需。被返回數組的第一個索引。

Number必需。規定要插入的元素數。

Value必需。規定供填充數組所使用的值。

$number = array_fill(3,4,"blue");

print_r ($number);

顯示為:Array ( [3] => blue [4]=> blue [5] => blue [6] => blue )


本文出自 “Linux獄長” 博客,請務必保留此出處http://sswqzx.blog.51cto.com/2494644/1963557

PHP系列(三)PHP數組與數據結構