php數組的定義

陣列在之前我們讓大家記住兩個觀點:

    1.陣列可以存入多個不同類型的數據,是一個複合資料型別。

    2.陣列的英文是array,學了一了最簡單的陣列宣告。

那我們來進行簡單的回顧:

<?php

$shu = array(1 , 1.5 , true ,'天王盖地虎,小鸡炖蘑菇');

echo '<pre>';
var_dump($shu);
echo '</pre>';

?>

在上例中,我們發現我們存入了:

    1.整數

#    2 .浮點

    3.布林

    4.字串

註:上例中echo pre這個標籤的主要目的是為原樣輸出,格式顯示的較好看,更清晰。

我們用var_dump()列印出來顯示看看效果:

QQ截图20161114115125.png

我們仔細觀察上面的這張圖,你會發現以下幾個特點:

    1.array(size = 4) 說明裡面有4個元素

    2.0 => int 1 我們知道int是整數的意思,1是整數的數值。那前面的0,1,2,3和=>代表什麼意思呢?

    3.最新前的0,1,2,3代表的是值的讀取標識號,我們稱為下標或鍵(英文:key)

    4.= > 是一個符號標準叫法叫作:鍵值對應符。因此,以後再看到 0=> int 1 可以這樣來說。 下標訪問符0對應整型的1。

    5.我們也稱數組裡面的鍵值對為元素,而元素就是鍵值對的組合。

喔耶! 陣列好像還挺好學的,全是一些規律喲。

我們透過上例,其實你一不小心的就完成了數組其中的一種宣告方式:索引數組的宣告喲。

所謂索引陣列:就是下標全為整數的陣列。

索引陣列的下標必須從0開始嗎?

答:這個問題其實不然,索引陣列不一定要從0開始。

那如何能夠不從0開始呢?

答:需要用到大家在上面學的一小塊知識喲。就是鍵值對應符。我們來動手寫寫。

<?php

$kele = array('只有不断努力才能博得未来',10 => 'NoAlike', 'PHP中文网' , '去PHP中文网学PHP', 19 => '凤姐和芙蓉我都爱' , '杨幂我最爱');

//打印显示$kele
echo '<pre>';
var_dump($kele);
echo '</pre>';
?>

上例中,我們一不小心就寫了一個索引數組。不過索引數組的下標不是從0 開始的,而是從10開始的。

不過上面的例子中,我們覺得寫的不優美,我們可以將程式碼寫的更加優美一些,格式更加清晰一些。

<?php

$kele = array(
           '只有不断努力才能博得未来',
           10 => 'NoAlike',
           'PHP中文网' ,
           '去PHP中文网学PHP',
           19 => '凤姐和芙蓉我都爱' ,
           '杨幂我最爱'
       );


//打印显示$kele
echo '<pre>';
var_dump($kele);
echo '</pre>';
?>

這樣是不是看得更清楚,一行對應一個陣列的值。

我們執行一下程式碼,看看效果:

QQ截图20161114115947.png

透過上面的效果,我們來總結規律:

    1.索引數組若不強制聲明他的下標,他的下標是從0開始的。 (我們的第一個陣列的值:只有不斷努力才能博得未來。這個值的下標為0)。

    2.如果我指定過下標他的下標就為我指定的值。如下標示為10和下標為19的,都是我指定過的值。

    3.若某個值(如NoAlike),強制指定了下標(下標為10)。在它後面加上的值(PHP中文網),不指定下標的話。他們的下標成長規律為最大值+1。

例如:鳳姐和芙蓉我都愛的下標為19.我在後面加上了:楊冪我最愛。它的下標自動增長為了11。

不知不覺,你已經學會了索引數組的創建,神奇吧?真為你感到高興!

在索引數組中增加元素

學習完成了索引數組的創建,接下來我們學習索引數組的增加、修改和刪除。

<?php

$minren = array(
           '杨幂',
           '王珞丹',
           '刘亦菲',
           '黄圣依'
       );


//如何向这$minren这个数组中增加元素呢

//猜猜范冰冰的下标是多少?
$minren[] = '范冰冰';

$minren[100] = '范爷';

//它的下标又为几呢?
$minren[] = '李晨';

?>

總結:

    1.增加元素在索引數組中: 陣列變數名稱[]、陣列變數名稱[鍵值]這兩種方式來增加元素

    2.鍵值的成長規則與先前的規則相同。都是最大值加1的原則。

在索引數組中刪除元素

#我們還拿剛剛的陣列來舉例:

<?php

$minren = array(
           '杨幂',
           '王珞丹',
           '刘亦菲',
           '黄圣依',
           '范冰冰'
       );


//假设我不喜欢:黄圣依,如何将黄圣依给删掉掉呢?

//如果删除掉后范冰冰的下标为多少呢?

//如果在后面再追加一个元素,会填掉:“黄圣依”留下来的空吗?

unset($minren[3]);

$minren[] = '金星';


echo '<pre>';

var_dump($minren);

echo '</pre>';


?>

看看效果:

QQ截图20161114130646.png

    1.使用unset刪除變數的方式來刪除陣列裡面的值。

    2.刪除了中間的數值,並不會讓後面的下標向前自動移動。而是原來的值為多少就為多少

    3.刪除其中的某個數值,新加入的數值不會取代原來的位置,仍遵循最大值加1的原則。

修改值

我們學習最簡單的創造、增加和刪除。我相信大家一定能夠推理出如何修改數值了。

<?php

$minren = array(
           '杨幂',
           '王珞丹',
           '刘亦菲',
           '黄圣依',
           '范冰冰'
       );

$minren[5] = '范爷';

$minren[2] = '亦菲,不要嫁给韩国人好吗?';

echo '<pre>';

var_dump($minren);

echo '</pre>';


?>

執行上面的程式碼,輸出看看結果。

1.用變數名[鍵] = 新值。就把數組中的值定的值修改了。

索引陣列的其他宣告方式

#透過上面的例子,我們學習到了陣列的宣告。我們來學一下數組的其他聲明方式。

一、直接用之前未宣告的變量,用變數名稱後面接中括號的方式宣告數組。

<?php
    //直接写一个变量后面加上中括号,声明变量
    $qi[] = '可口可乐';
    $qi[10] ='百事可乐';
    echo '<pre>';
    var_dump($qi);
    echo '</pre>';
?>

二、每次用array()寫的太麻煩了,還可以不用寫array喲,更簡單。

<?php

$minren = [
           '杨幂',
           '王珞丹',
           100 => '刘亦菲',
           '黄圣依',
           '范冰冰'
       ];

echo '<pre>';

var_dump($minren);

echo '</pre>';

?>

上面是另外兩種寫法。當然,你自己喜歡用哪一種就用哪一種來宣告。

關聯陣列

#

索引數組適當的變一下形就出現了關聯數組。只要數組裡面有一個為字串的數組,就為關聯數組。

透過上例中,我們發現陣列的下標只能夠為字串,當然無法滿足我的需求。

假設我想宣告一個下標為帥對應陳奕迅這個值。肯定不能滿足我的需求。

那我們來宣告關聯數組。跟索引數組的聲明方式完成一樣。不過不同的是,必須要指定字串的下標和必須要使用鍵值對應符。

<?php

//声明一下关联数组
$rela = array(
       '帅' => '陈奕迅',
       '很帅' => '黄晓明',
       '灰常灰常帅' => '宁泽涛',
       '有男人味的大叔' => '吴秀波',
);




//再来玩玩简洁声明

$drink = [
        '美' => '凤姐',
        '很美' => '芙蓉姐姐',
        'verymei' => '杨幂',
        '心中滴女神呀' => '华妃',
        100 => '孙俪',
        '娘娘',
       ];


// 输出 $rela
echo '<pre>';

var_dump($rela);

echo '</pre>';


// 输出$drink

echo '<pre>';

var_dump($drink);

echo '</pre>';

?>

我們來實驗一下看看最終的結果是什麼樣的:

QQ截图20161114130928.png

我們透過實驗知道:

    1.聲明關聯數組是鍵名=> 值

    2.在關聯數組可以有索引數組的元素

    3.關聯數組中的索引數組的元素後聲明了無下標的元素,仍是最大值+1原則。 (觀察上圖的值為孫儷、娘娘的兩個元素)。

關聯陣列的增、刪、改

<?php 
$drink = [
             '美' => '凤姐',
             '很美' => '芙蓉姐姐',
             'verymei' => '王涛',
             '心中滴女神呀' => '杨澜',
             100 => '孙俪',
             '娘娘',
            ];
//追加方式与索引数组是一样的 
$drink['ynj'] = '伊能静'; 
//输出试试 
echo '<pre>';
var_dump($drink);
echo '</pre>'; 
//删除一个试试 
unset($drink['verymei']);
echo '<pre>';
var_dump($drink);
echo '</pre>'; 
//将芙蓉姐姐 改成:心里美才是真的美 
$drink['很美'] = '心里美才是真的美'; 
echo '<pre>';
var_dump($drink);
echo '</pre>'; 
?>

你動手做剛剛的實驗,你會發現操作方式與索引的操作方式一樣。只不過下標在讀取有點不一樣罷了。

其他的關聯數組宣告方式

<?php
    $drink['nf'] = '农夫山泉';
    $cocacola = '可口可乐';
    //当然可以是变量哟
    $drink['kl'] = $cocacola;
    $data = array(
        'kl' => $cocacola,
    );
    echo '<pre>';
    var_dump($drink);
    echo '</pre>'; 
?>

透過上例我們發現,在關聯數組當中也是可以不用array,直接在變數後面接括號。括號裡面插入字串下標,一樣也宣告成功。

後面插入變數的例子,只不過把字串變成了變量,當然也沒有問題。

數組當中插入數組

數組可以插入整數、浮點、字串,那麼數組當中可不可以插入數組呢?
當然可以。

在學習陣列的時候,我們定義了這樣一組名詞。

    1.一維數組 數組裡面沒有其他數組,只有單純的一些變數或值。

    2.二維數組數組裡面插入了單層的一個數組,或者多個數組

    3.三維數組在數組(A)裡面插入了一個數組(B),在B數組裡面又插入了一層樓的陣列(C),這種我們就稱為三維數組

    4.超過三維的,統統叫多維數組。

註:索引數組和關聯數組當中都可以再插入其他數組,讓數組變成多維的。

我們來宣告一個一維陣列,只有一個維度。索引、關聯均可,這個操作大家都很熟。

<?php

//一维的索引数组
$data = [1 , 2 , 3 , 4 ,  10 => 250];

//一维的关联数组

$rela = [
           'beijing' => '北京',
           'shanghai' => '上海',
           'tj' => '天津',
       ];

echo '<pre>';
var_dump($rela);
echo '</pre>';

echo '<pre>';
var_dump($data);
echo '</pre>';
?>

一維數組大家很熟悉,也不難,就是宣告數組嘛。二維也不難,只是在數組裡面再插一個或多個數組。二維學好了,多維就學好了。

<?php

$person = array(

       'office' => '办公室',

       //注意:插入第一个数组哟
       'family' => array(

           '爸爸',
           '妈妈',
           'yeye' => '爷爷',
           'nn' => '奶奶',
       ),

       //注意:又插入了一个平级的数组
       'jiaotong' => array(
           '自行车',
           '摩托车',
           '汽车',
           '飞机',
       ),
);

echo '<pre>';
var_dump($person);
echo '</pre>';

?>

我們執行一下看看效果:

QQ截图20161114131215.png

我們發現變數person 是一個陣列類型。有三個元素(size=3)。

  • 第一個元素為office 對應的是一個字串“辦公室”,

  • 第二個元素為family 裡面是一個陣列,這個陣列又有4個元素,數值分別為:爸爸、媽媽、爺爺、奶奶。

  • 第三個元素為jiaotong,裡面也為一個陣列有4個元素,數值分別為:自行車、摩托車、汽車、飛機。

好了,二維好聲明,只要把格式寫對了,確定是在一個陣列裡面再插入一個陣列就好。

那要如何訪問:爺爺和爸爸這兩個數值呢?

<?php
$person = [

       'office' => '办公室',

       //注意:插入第一个数组哟
       'family' => [

           '爸爸',
           '妈妈',
           'yeye' => '爷爷',
           'nn' => '奶奶',
       ],

       //注意:又插入了一个平级的数组
       'jiaotong' => [
           '自行车',
           '摩托车',
           '汽车',
           '飞机',
       ],
];

//访问“爸爸”这什值
echo $person['family'][0];

echo '<br />-----华丽丽的分割线------<br />';


//访问“爷爷”这什值
echo $person['family']['yeye'];

echo '<br />-----华丽丽的分割线------<br />';

//访问“汽车”这什值
echo $person['jiaotong'][2];


?>

我們看看結果如下:

QQ截图20161114131256.png

上例大家會發現,存取二維陣列不過是依照先前的下標讀取方式依序向下讀取即可。

先寫上變量,將括號寫上family這個下標,再寫上要存取元素的下標。

三維陣列我們說了概念,那我們直接上手實驗看看效果:

<?php


$area = array(

       'china' => array(

           '上海',
           '湖北',
           '天津',
           '北京' => array(
               'hd' => '海淀',
               '朝阳',
               '房山',
               'cp' => '昌平',
           ),

           '广东' => array(
               '深圳',
               '广州',
               '佛山',
               'dg' => '东莞',

           ),

       ),


       'usa' => array(

           '华盛顿',
           '旧金山',
           '纽约' => array(
                   '曼哈顿区',
                   '皇后区',
                   '布鲁克林区',
           ),

       ),
);


echo '<pre>';
var_dump($area);
echo '</pre>';
?>

我們執行一下看看效果:

QQ截图20161114131432.png

說明:

在變數$area下有二個數組,一個為china,一個為usa。

在china這個陣列裡面插入了上海、湖北、天津,又插入了北京和廣東。而北京和廣東又是一個陣列。在北京和廣東這兩個數組裡面分別有不同的元素。

在這usa 這個陣列裡面插美國的華盛頓、舊金山和紐約。而紐約下面又是一個數組,說明了紐約下面的幾個區。

所以說,三維數組就是在數組裡面再插入一個數組(A),在A數組裡面插入一個數組。

我們接下來看看,如何來讀取裡面的值。

<?php


$area = array(

       'china' => array(

           '上海',
           '湖北',
           '天津',
           '北京' => array(
               'hd' => '海淀',
               '朝阳',
               '房山',
               'cp' => '昌平',
           ),

           '广东' => array(
               '深圳',
               '广州',
               '佛山',
               'dg' => '东莞',

           ),

       ),


       'usa' => array(

           '华盛顿',
           '旧金山',
           '纽约' => array(
                   '曼哈顿区',
                   '皇后区',
                   '布鲁克林区',
           ),

       ),
);


//读取华盛顿
echo $area['usa']['0'];

//读取:布鲁克林
echo $area['usa']['纽约'][2];


//读取:昌平
echo $area['china']['北京']['cp'];

//修改cp下标的值改为:西城区

$area['china']['北京']['cp'] = '西城区';

//输出看看原来昌平的值是否发生了变化
echo $area['china']['北京']['cp'];

?>

透過上面我們發現陣列學習起來不難。


學習多維數組的困難點:

注意格式,將每個維度的換行、縮排弄整齊。就不容易出錯了。

【切記】
數組元素間的分割符為逗號,在數組中插入數組的時候,不要在結尾處寫成了分號(;)

3.png

繼續學習
||
<?php $minren = array( '杨幂', '王珞丹', '刘亦菲', '黄圣依', '范冰冰' ); $minren[5] = '范爷'; $minren[2] = '亦菲,不要架给韩国人好吗?'; echo '<pre>'; var_dump($minren); echo '</pre>'; ?>