一、索引數(shù)組
索引數(shù)組是指鍵名為整數(shù)
的數(shù)組。默認(rèn)
情況下,索引數(shù)組的鍵名是從0開始
,并依次遞增。它主要適用于利用位置(0、1、2……)來標(biāo)識數(shù)組元素的情況。另外,索引數(shù)組的鍵名也可以自己指定。
二、關(guān)聯(lián)數(shù)組
關(guān)聯(lián)數(shù)組是指鍵名為字符串
的數(shù)組。通常情況下,關(guān)聯(lián)數(shù)組元素的“鍵”和“值”之間有一定的業(yè)務(wù)邏輯關(guān)系。因此,通常使用關(guān)聯(lián)數(shù)組存儲一系列具有邏輯關(guān)系的變量。關(guān)聯(lián)數(shù)組的“鍵”都是字符串,并與“值”之間具有一一對應(yīng)的關(guān)系。
<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
echo "Peter is " . $age['Peter'] . " years old.";
?>
三、數(shù)組定義
array() 語言結(jié)構(gòu)法:array()語言結(jié)構(gòu)中的數(shù)組元素使用鍵=>值
的方式進行表示,各元素之間使用逗號,
進行分割。
$fruits = array('apple', 'grape', 'pear'); // 省略鍵名
$sports = array(2 => 'basketball', 4 => 'swimming',); // 指定鍵名
數(shù)組在省略鍵名的設(shè)置時,默認(rèn)從0開始,依次遞增加1,因此該數(shù)組元素的鍵名依次為“0、1、2”。
除此之外,還可以根據(jù)實際需求自定義數(shù)組元素的鍵名,如上述示例中的$sports數(shù)組變量,將其第1個元素鍵名設(shè)置為2,第2個元素的鍵名設(shè)置為4,若無特殊,第3個元素的鍵名就從5開始。
舉例:文章來源地址http://www.zghlxwxcb.cn/news/detail-490168.html
<?php
$fruits = array('apple', 'grape', 'pear');
echo $fruits[0];
echo '<hr>';
echo $fruits[1];
echo '<hr>';
echo $fruits[2];
echo '<hr>';
?>
<?php
$sports = array(2 => 'basketball', 4 => 'swimming');
echo $sports[2];
echo '<hr>';
echo $sports[4];
echo '<hr>';
$info = array('id' => 10, 'name' => 'Tom', 'tel' => 18810888188);
?>
在定義關(guān)聯(lián)數(shù)組時 “鍵”則有明確的數(shù)據(jù)類型要求,具體如下:
- 鍵只能是整型或字符串型的數(shù)據(jù),如果是其他類型,則會執(zhí)行類型自動轉(zhuǎn)換;
- 合法整型的字符串會被轉(zhuǎn)為整型,如“2”轉(zhuǎn)為2,而“02”則不會被轉(zhuǎn)換,因為其不是一個合法的十進制數(shù)值;
- 浮點數(shù)會被舍去小數(shù)部分直接轉(zhuǎn)換成整型,如“2.6”轉(zhuǎn)為2;
- 布爾類型的true會被轉(zhuǎn)為1,false轉(zhuǎn)為0;
- NULL類型會被轉(zhuǎn)為空字符串;
- 若數(shù)組中存在相同鍵名的元素時,后面的元素會覆蓋前面元素的值。
在定義數(shù)組時,還可以定義沒有任何元素的數(shù)組,以及既有索引表示方式、又有關(guān)聯(lián)表示方式的數(shù)組元素。
$mixed = array(2, 'str', 'id' => 5, 5 => 'b', 'a');
echo $mixed['6'];
$mixed數(shù)組的元素“b”指定了數(shù)字鍵名為“5”, “b”元素后的“a”元素會自動將前面最大的數(shù)字鍵名加1
后,作為其鍵名,即5+1得到鍵名6。
1、多維數(shù)組
多維數(shù)組是包含一個或多個數(shù)組的數(shù)組。 在多維數(shù)組中,主數(shù)組中的每一個元素也可以是一個數(shù)組,子數(shù)組中的每一個元素也可以是一個數(shù)組。 一個數(shù)組中的值可以是另一個數(shù)組,另一個數(shù)組的值也可以是一個數(shù)組,依照這種方式,我們可以創(chuàng)建二維或者三維數(shù)組。
$data = array(
0 => array('name' => 'Tom', 'gender' => '男'),
1 => array('name' => 'Lucy', 'gender' => '女'),
2 => array('name' => 'Jimmy', 'gender' => '男')
);
print_r($data[0]); //輸出第一個元素
print_r($data[1]);
2、賦值方式
使用賦值方式定義數(shù)組,實際上就是創(chuàng)建一個數(shù)組變量,然后使用賦值運算符直接給變量賦值。
<?php
$arr[] = 123; //沒有寫下標(biāo)自動索引+1賦值 arr[0] // 存儲結(jié)果:$arr[0] = 123
$arr[] = 'hello'; //這里就賦值arr[1] // 存儲結(jié)果:$arr[1] = 'hello'
$arr[4] = 'PHP'; // 存儲結(jié)果:$arr[4] = 'PHP'
$arr['name'] = 'Tom'; // 存儲結(jié)果:$arr['name'] = 'Tom'
$arr[] = 'Java'; // 存儲結(jié)果:$arr[5] = 'Java'
print_r($arr);
?>
輸出結(jié)果:
echo 'body -html' Array ( [0] => 123 [1] => hello [4] => PHP [name] => Tom [5] => Java )
賦值方式定義數(shù)組就是單獨為數(shù)組元素賦值。需要注意的是,賦值方式不能定義一個空數(shù)組。
3、短數(shù)組定義法([ ] PHP 5.4起增加的)
短數(shù)組定義法 [ ] 與array()語法結(jié)構(gòu)相同,只需將array()替換為[ ]即可
//創(chuàng)建一個空數(shù)組
$arr = array();
var_dump( $arr );
$arrs = [];
var_dump( $arrs );
更詳細例子:
// 相當(dāng)于:array('id' => 12, 'name' => 'PHP')
$object = ['id' => 12, 'name' => 'PHP'];
//相當(dāng)于:array(array(1, 3), array(2, 4))
執(zhí)行結(jié)果:
echo 'body -html' Array ( [id] => 12 [name] => PHP ) Array ( [id] => 12 [name] => PHP )
四、訪問數(shù)組
數(shù)組定義完成后,若想要查看數(shù)組中某個具體的元素,則可以通過“數(shù)組名[鍵]”的方式獲取。
$sub = ['PHP', 'Java', 'C', 'Android'];
$data = ['goods' => 'clothes', 'num' => 49.90, 'sales' => 500];
echo $sub[1]; // 輸出結(jié)果:Java
echo $sub[3]; // 輸出結(jié)果:Android
echo $data['goods']; // 輸出結(jié)果:clothes
echo $data['sales']; // 輸出結(jié)果:500
另外,若要一次查看數(shù)組中的所有元素,則可以利用前面學(xué)習(xí)過的輸出語句函數(shù)print_r()
和var_dump()
,并且通常情況下為了使輸出的函數(shù)按照一定的格式打印,查看時經(jīng)常與pre
標(biāo)記一起使用。
使用echo
打印數(shù)據(jù)只會打印arr不會把arr數(shù)組里的值打印出來
。
注意:<pre></pre>
標(biāo)簽加上print_r( )
函數(shù)格式化
輸出:
$arr = [
'純凈水',
'礦泉水',
'蘇打水',
];
print_r($arr)
echo '<pre>';
print_r($arr); // print_r()函數(shù)打印數(shù)組變量$arr
echo '</pre>';
五、遍歷數(shù)組
1、使用 for 循環(huán)
<?php
$cars=array("Volvo","BMW","Toyota");
$arrlength=count($cars);
for($x=0;$x<$arrlength;$x++)
{
echo $cars[$x];
echo "<br>";
}
?>
2、foreach語句遍歷
如果是遍歷無順序的數(shù)組,由于數(shù)組中的鍵沒有規(guī)律可循,所以可以使用foreach循環(huán)語句,foreach僅用于數(shù)組,有兩種
語法。格式如下:
第一種格式:
foreach ($array as $value){循環(huán)體}
第二種格式:
foreach($array as $key => $value){循環(huán)體}
$array表示數(shù)組 as $key表示鍵 $value表示值
- 第一種格式會循環(huán)遍歷給定的 數(shù)組。每次循環(huán)中,當(dāng)前數(shù)組元素的值被賦給 $value,下一次循環(huán)中將會得到下一個數(shù)組元素,直到遍歷到數(shù)組的末尾,停止遍歷并退出循環(huán)。
- 第二種格式功能與第一種相同,只是除了當(dāng)前數(shù)組元素的鍵名也會在每次循環(huán)中被賦給變量 $key。
舉例:
<?php
$h=array("可樂","雪碧","檸檬茶");
foreach($h as $value){
echo "$value <br>";
}
?>
不僅前面講解的標(biāo)量數(shù)據(jù)類型可以進行比較運算,數(shù)組這種復(fù)合數(shù)據(jù)類型也可以進行運算,不過數(shù)組有其專門提供的數(shù)組操作符進行對應(yīng)的運算。
六、合并兩個數(shù)組
1、“+”聯(lián)合運算符
“+”為聯(lián)合運算符,用于合并數(shù)組,如果出現(xiàn)下標(biāo)相同
的元素,則保留第1個
數(shù)組內(nèi)的元素。
$num = [2, 4];
$alp = ['a', 'b', 'c'];
$mer1 = $num + $alp; // [2, 4] + ['a', 'b', 'c'];
$mer2 = $alp + $num;
print_r($mer1); // 輸出結(jié)果:Array ( [0] => 2 [1] => 4 [2] => c )
echo '<hr>';
print_r($mer2); // 輸出結(jié)果:Array ( [0] => a [1] => b [2] => c )
2、array_combine 函數(shù)
array_combine 函數(shù),通過合并兩個數(shù)組來創(chuàng)建一個新數(shù)組,其中的一個數(shù)組是鍵名
,另一個數(shù)組的值為鍵值
。
<?php
$a=['id','name','email','age'];
$b=['1','小馬','253166555@qq.com','20'];
$c=array_combine($a,$b);
print_r($c);
?>
七、數(shù)組排序函數(shù)
對于數(shù)組的排序,除了可使用前面講解的排序算法實現(xiàn)外,PHP還提供了內(nèi)置的數(shù)組排序函數(shù),可以輕松對數(shù)組實現(xiàn)排序、逆向排序、按鍵名排序等操作。
函數(shù)名稱 | 功能描述 |
---|---|
sort() |
對數(shù)組排序(從低到高) |
rsort() |
對數(shù)組逆向排序(從高到低) reverse |
asort() | 對數(shù)組進行排序并保持鍵值關(guān)系 |
ksort() | 對數(shù)組按照鍵名排序 |
arsort() | 對數(shù)組進行逆向排序并保持鍵值關(guān)系 |
krsort() | 對數(shù)組按照鍵名逆向排序 |
shuffle() | 將數(shù)組元素順序打亂 |
array_multisort() | 對多個數(shù)組或多維數(shù)組進行排序 |
八、數(shù)組增刪改查
1、增(array_push)
php增加數(shù)組元素的方法是:可以通過array_push()函數(shù)來實現(xiàn)。該函數(shù)可以向數(shù)組尾部插入一個或多個元素,并返回新數(shù)組的元素個數(shù)。
函數(shù)語法:【array_push(array, value)】
函數(shù)介紹:array_push() 函數(shù)向數(shù)組尾部插入一個或多個元素。該函數(shù)返回新數(shù)組的元素個數(shù)。
函數(shù)語法: array_push(array,value1,value2…)
array必須,規(guī)定一個數(shù)組;value1必須,規(guī)定要添加的值;value2可選,規(guī)定要添加的值;
舉例:
<?php
$a=array("red","green");
array_push($a,"blue","yellow");
print_r($a);
?>
2、刪(unset)
在數(shù)組定義完成后,有時也需要根據(jù)實際情況去除數(shù)組的某個元素。
例如,一個保存全班學(xué)生信息的多維數(shù)組,若這個班級中有一個學(xué)生轉(zhuǎn)學(xué)了,那么在這個班級學(xué)生信息管理中就需要刪除此學(xué)生。此時,可以使用PHP提供的unset()函數(shù)完成數(shù)據(jù)的刪除。
數(shù)組刪除:
<?php
$array = array(0 => "a", 1 => "b", 2 => "c");
unset($array[1]); //你要刪除的數(shù)組元素值的鍵
print_r($array);
unset ($bar['quux']); // 銷毀單個數(shù)組元素
?>
3、改(array_replace)
array_replace() 函數(shù)使用后面數(shù)組的值替換第一個數(shù)組的值。
<?php
$a1=array("red","green");
$a2=array("blue","yellow");
var_dump($a1);
echo '<br>';
var_dump(array_replace($a1,$a2));
?>
使用修下標(biāo)改數(shù)組
<?php
$arr=array(11,22,33,44);
$arr[0]=66; //數(shù)組變?yōu)?arr=array(66,22,33,44);;
print_r($arr);
?>
4、查(array_search)
順序查找法是最簡單的查找法,只需按照數(shù)組中元素的保存順序,利用待查的值與數(shù)組中的元素從前往后一個一個的進行比較,直到找到目標(biāo)值或查找失敗。
array_search() 函數(shù)在數(shù)組中搜索某個鍵值,并返回對應(yīng)的鍵名。
<?php
$a=array("a"=>"red","b"=>"green","c"=>"blue");
echo array_search("red",$a);
?>
九、數(shù)組常用的指針函數(shù)
數(shù)組指針:用于指向數(shù)組中的某個元素,默認(rèn)情況下,指向數(shù)組的第1個元素。通過移動或改變指針的位置,可以訪問數(shù)組中的任意元素。
函數(shù)名稱 | 功能描述 |
---|---|
current() |
獲取數(shù)組中當(dāng)前指針指向的元素的值 |
key() |
獲取數(shù)組中當(dāng)前指針指向的元素的鍵 |
next() | 將數(shù)組中的內(nèi)部指針向前移動一位 |
prev() | 將數(shù)組中的內(nèi)部指針倒回一位 |
each() | 獲取數(shù)組中當(dāng)前的鍵值對并將數(shù)組指針向前移動一步 |
end() | 將數(shù)組的內(nèi)部指針指向最后一個元素 |
reset() | 將數(shù)組的內(nèi)部指針指向第一個元素 |
1、指針操作函數(shù)
<?php
$arr=['a','b','c','d','e','f'];
//剛開始指針指向a
echo key($arr) . ' - ' . current($arr); //0 -a // 獲取當(dāng)前指針指向的鍵和值:0 - a
echo ''.PHP_EOL;
next($arr);
echo key($arr) . ' - ' . current($arr); //1-b
echo ''.PHP_EOL;
next($arr);
echo key($arr) . ' - ' . current($arr); //2-c
echo ''.PHP_EOL;
prev($arr); //回退一個
echo key($arr) . ' - ' . current($arr); //1-b
echo ''.PHP_EOL;
reset($arr); //復(fù)位
echo key($arr) . ' - ' . current($arr); //0-a
echo ''.PHP_EOL;
echo end($arr);
echo key($arr) . ' - ' . current($arr); //5-f
echo ''.PHP_EOL;
?>
輸出結(jié)果:
0 - a
1 - b
2 - c
1 - b
0 - a
f5 - f
2、數(shù)組元素操作函數(shù)
在操作數(shù)組過程中,經(jīng)常會遇到在數(shù)組的前面或后面添加或刪除元素的情況。
函數(shù)名稱 | 功能描述 |
---|---|
array_pop() | 將數(shù)組最后一個元素彈出(出棧) |
array_push() | 將一個或多個元素壓入數(shù)組的末尾(入棧)//在末尾插入元素 |
array_unshift() | 在數(shù)組開頭插入一個或多個元素 //在開頭 |
array_shift() | 將數(shù)組開頭的元素移出數(shù)組 |
array_unique() | 移除數(shù)組中重復(fù)的值 |
array_slice() | 從數(shù)組中截取部分?jǐn)?shù)組 |
array_splice() | 將數(shù)組中的一部分元素去掉并用其他值取代 |
舉例:
$arr = ['puff', 'Tiramisu'];
array_pop($arr); // 移出數(shù)組最后一個元素
print_r($arr); // 輸出結(jié)果:Array ( [0] => puff )
array_push($arr, 'cookie'); // 在數(shù)組末尾添加元素
print_r($arr); // 輸出結(jié)果:Array ( [0] => puff [1] => cookie )
array_unshift($arr, 22, 33);// 在數(shù)組開頭插入多個元素
print_r($arr); // 輸出結(jié)果: Array ( [0] => 22 [1] => 33 [2] => puff [3] => cookie )
array_shift($arr); // 移出數(shù)組第一個元素
print_r($arr); // 輸出結(jié)果:Array ( [0] => 33 [1] => puff [2] => cookie )
3、檢索函數(shù)
數(shù)組中元素的查找,除了前面講解的查找算法外,PHP還為其提供了內(nèi)置函數(shù)。
函數(shù)名稱 | 功能描述 |
---|---|
in_array() | 檢查數(shù)組中是否存在某個值,注意搜索的是value 不是key |
array_search() | 在數(shù)組中搜索給定的值,如果成功則返回相應(yīng)的鍵名,搜索的是value
|
array_key_exists() | 檢查給定的鍵名是否存在于數(shù)組中,這里才是搜索的是key
|
-
in_array()
和array_key_exists()
函數(shù)的返回值
類型均為布爾型
,檢測的數(shù)據(jù)存在返回true,否則返回false。 -
函數(shù)
array_search()
的返回值
則是查找的“值”對應(yīng)的鍵名
。檢索函數(shù)返回值類型對程序開發(fā)中的判斷起著重要的作用。
除了前面提到的幾種類型外,PHP還提供了很多其他常用的數(shù)組函數(shù)。如建立指定范圍的數(shù)組,獲取數(shù)組中所有元素的值或鍵名等。
函數(shù)名稱 | 功能描述 |
---|---|
count() | 計算數(shù)組中的元素數(shù)目或?qū)ο笾械膶傩詡€數(shù) |
range() | 建立一個包含指定范圍元素的數(shù)組 |
array_rand() | 從數(shù)組中隨機取出一個或多個元素 |
array_keys() | 獲取數(shù)組中部分的或所有的鍵名 |
array_values() | 獲取數(shù)組中所有的值 |
array_column() | 獲取數(shù)組中指定的一列 |
array_sum() | 計算數(shù)組中所有值的和 |
array_reverse() | 返回一個元素順序相反的數(shù)組 |
函數(shù)名稱 | 功能描述 |
---|---|
array_merge() | 合并一個或多個數(shù)組 |
array_flip() | 交換數(shù)組中的鍵和值 |
array_combine() | 創(chuàng)建數(shù)組,用一個數(shù)組的值作為其鍵名,另一個數(shù)組的值作為其值 |
array_chunk() | 將一個數(shù)組分割成多個 |
array_fill() | 用給定的值填充數(shù)組 |
array_replace() | 使用傳遞的數(shù)組替換第一個數(shù)組的元素 |
array_map() | 為數(shù)組中的每個元素應(yīng)用回調(diào)函數(shù) |
array_walk() | 使用自定義函數(shù)對數(shù)組中的每個元素做回調(diào)處理 |
4、字符串與數(shù)組轉(zhuǎn)換
4.1、字符串變成數(shù)組explode()
字符串 ‘a(chǎn)bc’ 可以認(rèn)為是字符數(shù)組[‘a(chǎn)’,‘b’,‘c’]
PHP提供的explode()函數(shù)用于根據(jù)指定字符對字符串進行分割
explode()函數(shù)
的返回值類型是數(shù)組類型
- 第1個參數(shù)表示分隔符
- 第2個參數(shù)表示要分割的字符串
- 第3個參數(shù)是可選的。規(guī)定所返回的數(shù)組元素的數(shù)目。
limit
的可能的值:
- 大于 0 - 返回包含最多 limit 個元素的數(shù)組
- 小于 0 - 返回包含除了最后的 -limit 個元素以外的所有元素的數(shù)組(如果是-2,從后面開始數(shù)去掉最后兩個元素,把其余元素返回)
- 0 - 會被當(dāng)做 1, 返回包含一個元素的數(shù)組
舉例:
// 字符串分割成數(shù)組
echo '>>>>';
var_dump(explode('n', 'banana'));
輸出結(jié)果:
array(3) { [0]=> string(2) "ba" [1]=> string(1) "a" [2]=> string(1) "a" }
// 分割時限制次數(shù)
echo '>>>>';
var_dump(explode('n', 'banana', 2));
輸出結(jié)果:
array(2) { [0]=> string(2) "ba" [1]=> string(3) "ana" }
// 返回除了最后2個元素外的所有元素
echo '>>>>';
var_dump(explode('n', 'banana', 0));
輸出結(jié)果:
array(1) { [0]=> string(6) "banana" }
// 返回除了最后1個元素外的所有元素
echo '>>>>';
var_dump(explode('n', 'banana', -1));
輸出結(jié)果:
array(2) { [0]=> string(2) "ba" [1]=> string(1) "a" }
// 返回除了最后2個元素外的所有元素
echo '>>>>';
var_dump(explode('n', 'banana', -2)); //ba
輸出結(jié)果:
array(1) { [0]=> string(2) "ba" }
4.2、把字符數(shù)組變成字符串
PHP提供的implode()函數(shù)用于利用指定字符將一維數(shù)組內(nèi)的元素值連接成字符串
- implode()函數(shù)的返回值類型為字符串型
- 第1個參數(shù)表示連接字符串
- 第2個參數(shù)表示待轉(zhuǎn)換的數(shù)組。其中,不論指定字符是否存在,只要第2個參數(shù)是空數(shù)組,結(jié)果都為空字符串。
值得一提的是,由于歷史原因,該函數(shù)的第1個參數(shù)可以省略。
文章來源:http://www.zghlxwxcb.cn/news/detail-490168.html
舉例:
<?php
//['a', 'b', 'c'] abc a-b-c
// ① 利用指定字符連接一維數(shù)組元素的值
echo implode('-', ['a', 'b', 'c']); // 輸出結(jié)果:a-b-c
echo PHP_EOL;
echo implode(',', ['a' => 1, 'b' => 2]); // 輸出結(jié)果:1,2
// ② 省略指定字符
echo PHP_EOL;
echo implode(['a', 'b', 'c']); // 輸出結(jié)果:abc
// ③ 利用指定字符連接一個空數(shù)組
echo PHP_EOL;
var_dump(implode('it', [])); // 輸出結(jié)果:string(0) ""
?>
到了這里,關(guān)于網(wǎng)絡(luò)安全入門學(xué)習(xí)第十七課——PHP數(shù)組的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!