PHP中的數組(Array)

定義數組的方式:

  1. 使用array內置關鍵字

  2. 使用[]定義

  3. 直接賦值

<?php
echo '<pre>';

//定義數組的方式
//
//1、使用array內置關鍵字
$arr = array(1,2,4);
print_r($arr);

//2、使用[]定義
$brr = [1,2,4];
print_r($brr);

//3、直接賦值
$crr[] = 1;
$crr[] = 2;
$crr[] = 4;

print_r($crr);

$drr[1= 1;
$drr[2= 2;
$drr[3= 4;

print_r($drr);

數組的分類:

按照維度來分:一維數組、二維數組、多維數組

按照下標來分:關聯數組、索引數組

<?php
echo '<pre>';
//數組的分類
//按照維度來分:一維、二維、多維
//一維數組
$arr = array('jack','boy',23);
print_r($arr);

//二維數組
$arr = array(array('jack','boy',23),array('rose','girl',18));
print_r($arr);

//多維數組
$arr = array(array('jack','boy',23,'18nan'=>array(18000,180,18)),array('rose','girl',18));
print_r($arr);
echo '<hr>';
//按照下標分
//下標是Int類型的 數組 叫索引數組
//下標是string類型的 數組 叫關聯數組
//關聯數組
$arr = array('username'=>'fengfeng','sex'=>'girl','age'=>18,'boyfriend'=>array('xiaohei','xiaobai','xiaohuang'));
print_r($arr);

//索引數組
$brr = array0=>'jack',1=>'boy',2=>23);
print_r($brr);

注意:在PHP中,索引數組的下標可以是非連續的值,只要在初始化時指定非連續的下標值即可。如果指定的下標值已經聲明過,則屬於對變量重新賦值。(前邊已指定的索引值將被覆蓋)。如果沒有指定索引值的元素與指定索引索引值的元素混在一起賦值,沒有指定索引值的元素的默認索引值,將緊跟指定索引值元素中的最高的索引值遞增。


<?php
echo '<pre>';
$count = array(1,14 =>'gaomou','A gongsi','beijingshi',14=>'0103243223','[email protected]');
print_r($count);
結果:
Array
(
    [0=> 1
    [14=> 0103243223
    [15=> A gongsi
    [16=> beijingshi
    [17=> [email protected]
)

訪問數組的方式:

訪問一維數組是使用數組的名稱和索引值,二維數組也一樣。

<?php
echo '<pre>';
$count = array(1,14 =>'gaomou','A gongsi','beijingshi',14=>'0103243223','[email protected]');

echo $count[14];

輸出結果:0103243223


直接賦值下標的分析:


<?php
echo '<pre>';
$arr[] = 'a';
$arr[][] = 'b';
$arr[1][] = 'c';
$arr[1][][] = 'd';
$arr[][] = 'f';
$arr[][][] = 'e';
print_r($arr);

輸出結果:

Array
(
    [0=> a
    [1=> Array
        (
            [0=> b
            [1=> c
            [2=> Array
                (
                    [0=> d
                )
        )
    [2=> Array
        (
            [0=> f
        )
    [3=> Array
        (
            [0=> Array
                (
                    [0=> e
                )
        )
)
 

count()獲取 數組單元 個數 或者 對象成員 屬性個數

<?php
$arr = array('daoyan','zhuren','xiaozhang','jiaoshou','gaolaoshi');

//count()獲取數組 單元個數 或者 對象成員屬性個數
echo count($arr);
echo '<hr>';

$num = count($arr);
echo $num;

輸出結果:5

         5

遍歷數組的幾種方法:


1、使用for語句循環遍歷(索引)數組:


<?php
$arr = array('daoyan','zhuren','xiaozhang','jiaoshou','gaolaoshi');


//方法一
$num = count($arr);
echo $num;
echo '<hr>';

//使用for循環,遍歷連續的索引數組,關聯數組會丟失無法打印出來
for($i = 0; $i < $num;$i++){
    echo $arr[$i].'<br>';
}

//方法二
echo count($arr);

//不推薦使用,因爲在for循環中count($arr)要執行N次,效率不高
for($i = 0; $i < count($arr);$i++){
    echo $arr[$i].'<br>';
}

2、foreach()遍歷數組:

    使用foreach語句遍歷數組時與數組的下標無關,不管是否是連續的數字索引數組,還是以字符串爲下標的關聯數組,都可以使用foreach語句遍歷。


foreach語句有兩種語法格式,第二種比較次要,但卻是第一種有用的擴展。


第一種語法格式:

foreach($arr as $value){

    循環體

}

第二種語法格式:

foreach($arr as $key => $value){

    循環體

}

第一種格式遍歷給定的$arr數組。每次循環中,當前元素的值被賦給變量$value,並且把數值內部的指針向後移動一步,因此下一次循環中將會得到該數組的下一個元素,直到數組的結尾停止循環,結束數組的遍歷。

第二種格式和第一種格式是做同樣的事情,只是當前元素的鍵名也會在每次循環中被賦給變量$key。

<?php
$arr = ['daoyan','user1' =>'zhuren','username' =>'xiaozhang',9=>'jiaoshou','gaolaoshi'];

//第一種,其中$v是任意值,隨便取
foreach($arr as $v){
    echo $v.'<br>';
}
echo '<hr>';
//第二種,將數組中每個單元的鍵和值全部輸出,其中$k是鍵、$v是值,$k,$v同樣是任意值,可隨便取
foreach($arr as $k=>$v){
    echo '鍵:'.$k.'=>值'.$v.'<hr>';
}

結果:

daoyan
zhuren
xiaozhang
jiaoshou
gaolaoshi
鍵:0=>值daoyan
鍵:user1=>值zhuren
鍵:username=>值xiaozhang
鍵:9=>值jiaoshou
鍵:10=>值gaolaoshi

3、聯合使用list()、each()和while循環遍歷數組


each()函數

each()函數需要傳遞一個數組作爲參數,返回數組中當前元素的鍵/值對,並向後移動數組指針到下一個元素的位置

鍵值對被返回爲四個單元的數組,鍵名爲 0,1,key 和 value。單元 0 和 key 包含有數組單元的鍵名,1 和 value 包含有數據。

 如果內部指針越過了數組的末端,則 each() 返回 FALSE。


<?php
$brr = ['lily','girl','age','xiaoming'];

//each ---返回數組中當前的 鍵值對 並將數組指針向前移動一步

echo '<pre>';

//1
$id=each($brr);
print_r($id);
//2
$bd=each($brr);
print_r($bd);
//3
$cd=each($brr);
print_r($cd);
//4
$fd=each($brr);
print_r($fd);
var_dump($fd);
//5
$qd=each($brr);
print_r($qd);
var_dump($qd);


結果:

1Array
(
    [1=> lily
    [value] => lily
    [0=> 0
    [key] => 0
)
2Array
(
    [1=> girl
    [value] => girl
    [0=> 1
    [key] => 1
)
3Array
(
    [1=> age
    [value] => age
    [0=> 2
    [key] => 2
)
4Array
(
    [1=> xiaoming
    [value] => xiaoming
    [0=> 3
    [key] => 3
)
4.array(4) {
  [1]=>
  string(8"xiaoming"
  ["value"]=>
  string(8"xiaoming"
  [0]=>
  int(3)
  ["key"]=>
  int(3)
}
5.bool(false)

 

list()函數

它不是真正的函數,而是PHP的語言結構。

list() 用一步操作給一組變量進行賦值,即把數組中的值賦給一些變量。 

 注: list() 僅能用於數字索引的數組並假定數字索引從0開始。


語法格式:

list(mixed varname,mixed...) =array_expression

list()語句和其他函數在使用上有很大的區別,並不是直接接收一個數組作爲參數。而是通過“=”運算符以賦值的方式,將數組中每個元素的值,對應的賦值給list()函數中的每個參數。list()函數又將它中的每個參數轉換爲直接可以在腳本中使用的變量


<?php
$brr = ['lily','girl','age','xiaoming'];

//list ---把數值中的值賦給一些變量
list($a,$b,$c) = $brr;

echo $a.'<br>';
echo $b.'<br>';
echo $c.'<br>';

結果:   lily
        girl
        age


while循環遍歷數組:


while( list($key,$value) = each(array_expression) ){

    循環體

}


<?php
echo '<pre>';
$arr =['user1'=>'zhanglaoshi','user2'=>'lilaoshi','user3'=>'wanglaoshi'];

while(list($key,$value) = each($arr)){
    echo 'key:'.$key.'=>value'.$value.'<br>';
}

結果:
key:user1=>valuezhanglaoshi
key:user2=>valuelilaoshi
key:user3=>valuewanglaoshi

注意:在執行 each() 之後,數組指針將停留在數組中的下一個單元或者當碰到數組結尾時停留在最後一個單元。如果要再用 each 遍歷數組,必須使用reset( )。

while和foreach語句兩種方法的區別:

相同點:兩者遍歷數組的結果相同。

不同點:在使用while語句遍歷數組之後,each()語句已經將傳入的數組參數內部指針指向了數組的末端。當再次使用while語句遍歷同一個數組時,數組指針已經在數組的末端,each()語句直接返回FALSE,while語句不會執行循環只有在while語句執行之前先調用一下reset()函數,重新將數組指針指向第一個元素。

foreach語句會自動重置數組的指針位置,當foreach開始執行時,數組內部的指針會自動指向第一個單元。這意味着不需要在foreach循環之前調用reset函數。

簡單的說就是:while需要先調用一下reset()函數,而foreach不需要。

數組指針相關操作函數:

current();

key();

next();

prev();

end();

reset();

<?php
//數組指針相關操作函數

echo '<pre>';
$arr = array('danyan','zhuren','xiaozhang','jiaoshou','gaolaoshi');
print_r($arr);

//current()返回指針指向的數據單元的值
var_dump((current($arr)));
var_dump(next($arr));
echo current($arr);

//返回指針的下一個位置所指向的數組單元的值
echo next($arr);
echo '<hr>';

//返回指針的上一個位置所指向的數組單元的值
echo prev($arr);
echo '<hr>';

echo end($arr);

//如果已經到了最後一個單元,再想訪問下一個,會返回布爾值false
var_dump(next($arr));

//重置指針位置
reset($arr);

echo current($arr);

超全局變量預定義數組:

<?php
echo '<pre>';
// print_r($_SERVER);

//網站根目錄
echo $_SERVER['DOCUMENT_ROOT'];
echo '<br>';
// 客戶端ip地址
echo $_SERVER['REMOTE_ADDR'];
echo '<br>';

//來源地址
echo $_SERVER['HTTP_REFERER'];

//當前執行的php腳本文件地址
echo $_SERVER['PHP_SELF'];


// print_r($_ENV);
echo '<br>';


// 此關聯數組包含 $_GET,$_POST 和 $_COOKIE 中的全部內容。
print_r($_REQUEST);


//通過 HTTP POST 方法傳遞的已上傳文件項目組成的數組
$_FILES;

//通過 HTTP cookies 傳遞的變量組成的數組。是自動全局變量。
$_COOKIE;

//包含當前腳本中 session 變量的數組
$_SESSION;

$username = 'alibaba';
print_r($GLOBALS);


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章