陣列
php中的陣列是一個有序映射,映射是一種把values關聯到keys的型別,陣列可以接受任意數量用逗號分隔符的鍵值對,
陣列的介紹
/*
* php中陣列可以分為:
* 索引陣列:下標是數字
* 關聯陣列:下標是字串
* 注:php中陣列其實不區分索引還是關聯陣列,都是根據鍵名找到對應的值
*
* php可以同時包含integer和string型別的鍵名
* key:可以是一個整數integer或者字串string
* value:可以是任意型別的值
*
* php中的key只能是integer或這string型別,如果使用其他型別會自動轉換:
* 1. 包含有合法整型值的字串會被自動轉換成整型(如'8'會被轉換為8,但是'08'不會被轉換)
* 2. 浮點數會被轉換成整型,小數部分會被舍去
* 3. 布林值會被轉換成整型(true轉成1,false轉成0)
* 4. NULL會被轉換成空字串,即''
* 5. 陣列和物件不能被用為鍵名
*
* 如果陣列定義中多個單元都用了同一個鍵名,則只會使用最后一個,之前的值都會被覆寫
* 如果沒有指定鍵名,且鍵名不都為負數,新添加的元素的鍵名是已有鍵名的最大值+1
* 如果鍵名都為負數,那么新添加的元素鍵名從0開始
*
*/
陣列的創建
$arr1 = array(); //創建一個空陣列
$arr2 = array(1, 2, 3); //創建一個索引陣列
$arr3 = array( //創建一個關聯陣列
'a' => 'a_value',
'b' => 'b_value',
'c' => 'c_value'
);
$arr4 = []; //[]用法和array()一致,同樣可以創建空陣列、索引陣列、關聯陣列
$arr4[] = 'a'; //利用[]對陣列進行擴展,為陣列新添元素
鍵名型別的自動轉換
$arr = array(
1 => 'a', //1 鍵名為integer型別,不會自動轉換
'b' => 'b', //'b' 鍵名為string型別,不會自動轉換
'8' => 'c', //8 包含有合法整型值的字串會自動轉換成整型
3.5 => 'd', //3 鍵名為浮點數型別,會舍去小數,轉換成integer型別
true => 'e', //1 鍵名為布爾型別,true轉成1,false轉成0
null => 'f', //'' 鍵名為NULL型別,會轉成''
'g' //9 沒有指定鍵名,默認為已有最大健名的值+1
);
$arr[] = 'h'; //10 新添加一個健值對,沒有指定鍵名,默認為已有最大健名的值+1
print_r($arr); //printf_r()是陣列輸出專用函式
通過range()和compact()快速創建
//range()快速創建下標連續的索引陣列
//
/*
* range()函式
* array range(mixed $start, mixed $limit[, number $step=1])
* 描述:建立一個包含指定范圍單元的,且下標連續的索引陣列
* start:序列的第一個值
* limit:序列結束于limit的值
* step:如果給出了step的值,它將被作為單元之間的步進值,如果未指定,默認為1
*
* 補充:
* string chr(int $value):將數字作為ASCII轉成成字符
* int ord(string $value):輸出字符的ASCII
*/
$arr = range(1, 5);
print_r($arr); //Array([0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5)
$arr = range('a', 'b', 'c');
print_r($arr); //Array([0] => a [1] => b [2] => c)
echo chr(90), "\n"; //Z
echo ord('z'), "\n"; //122
//compact()快速創建關聯陣列
/*
* compact()函式
* array compact(mixed $varname[, mixed $...])
* 描述:建立一個陣列,包括變數名和它們的值
*
* 補充:
* list($var1, $var2...):將陣列中的值賦給一些變數
*/
$username = 'zhao';
$age = '22';
$email = '[email protected]';
$arr = compact('username', 'age', 'email'); //通過將已有變數名放在函式中快速生成關聯陣列
//Array([username] => zhao [age] => 22 [email] => [email protected])
print_r($arr);
list($a, $b, $c) = array(1, 2, 3);
echo "a的值為{$a}, b的值為{$b}, c的值為{$c}", "\n"; //a的值為1, b的值為2, c的值為3
通過const和define()定義常量陣列
const ARR1 = [1, 2, 3]; //const定義常量陣列
print_r(ARR1); //Array([0] => 1 [1] => 2 [2] => 3)
define('ARR2', [1, 2, 3]); //define()定義常量陣列
print_r(ARR2); //Array([0] => 1 [1] => 2 [2] => 3)
//運用場景:自定義檔案上傳錯誤陣列資訊
define('CUSTOM_UPLOAD_ERRORS', [
'ext_error' => '檔案擴展名不符合規范',
'maxsize' => '上傳檔案大小不符合規范'
]);
//遇到檔案上傳時擴展名不符合規范的時候,可呼叫報錯
echo CUSTOM_UPLOAD_ERRORS['ext_error'], "\n"; //檔案擴展名不符合規范
陣列的使用
/*
* => 通過鍵名找到對應的鍵值
* 增、刪、改、查
*/
//查找:通過鍵名找到對應的鍵值
$arr1 = ['a', 'b', 'c', 'd'];
$arr2 = [
'username' => '王昭',
'sex' => '男'
];
echo '下標為2的值:', $arr1[2], "\n"; //下標為2的值:c
echo '用戶名為:',$arr2['username'], "\n"; //用戶名為:王昭
$arr3 = [ //二位陣列的查找
['id'=>'1001', 'name'=>'張三'],
['id'=>'1002', 'name'=>'李四']
];
echo '下標為0的姓名:', $arr3[0]['name'], "\n"; //下標為0的姓名:張三
//添加
$arr = ['a', 'b', 'c'];
$arr[] = 'd'; //添加元素,不指定鍵名,鍵名為數字
$arr['username'] = '王昭'; //添加元素,指定鍵名,鍵名為字串
print_r($arr); //Array([0] => a [1] => b [2] => c [3] => d [username] => 王昭)
//修改
$arr = ['a', 'b', 'c', 'username'=>'王昭'];
$arr['username'] = '張三';
echo $arr['username'], "\n"; //張三
//洗掉
unset($arr['username']); //洗掉鍵名為'username'的鍵值對
print_r($arr); //Array([0] => a [1] => b [2] => c)
unset($arr[1]);
print_r($arr); //Array([0] => a [2] => c)
unset($arr); //釋放陣列
//print_r($arr); //輸出錯誤 Notice: Undefined variable
其他型別轉換成陣列
/*
* 如果將一個值轉換為陣列,將得到一個僅有一個元素的陣列,其下標為0,該元素即為此標量的值;
* 物件可以轉換為陣列,但是注意盡量避免這樣轉換,因為會導致一些意想不到的效果,
* 注意:null轉換成陣列是空陣列[]
*
* 臨時轉換
* (array)$var
*
* 永久轉換
* settype($var, 'array')
*/
$str = 'abc';
$arr = (array)$str;
print_r($arr); //Array([0] => abc)
settype($str, 'array');
print_r($str); //Array([0] => abc)
陣列運算子
/*
* 常用的陣列運算子:
* +:合并陣列,如果鍵名相同,只展示左邊陣列的鍵值對
* ==:比較陣列的鍵名和對應的鍵值是否相同,如果相同回傳true,否則回傳false
* ===:既要比較鍵名和對應的鍵值及鍵值型別是否相同,而且順序也要相同
* !=:比較陣列的鍵名和對應的鍵值是否不相同
* !==:比較陣列的鍵名和對應的鍵值和鍵值型別是否不相同,或者順序不相同
* <>:和!=效果一樣
*
*
*/
$arr1 = [1, 2, 3];
$arr2 = ['a', 'b', 'c'];
$arr3 = ['username'=>'張三', 'age'=>12];
$arr4 = [10=>10, 11=>11];
$arrSum1 = $arr1 + $arr2; //如果鍵名相同,只會展示左邊陣列的鍵值對
$arrSum2 = $arr1 + $arr3; //+與陣列是索引陣列或者是關聯陣列無關
$arrSum3 = $arr1 + $arr3 + $arr4; //如果后面的陣列的鍵名和前面的陣列的鍵名重復,不會覆寫,會展示前面陣列對應的鍵值
print_r($arrSum1); //Array([0] => 1 [1] => 2 [2] => 3)
print_r($arrSum2); //Array([0] => 1 [1] => 2 [2] => 3 [username] => 張三 [age] => 12)
print_r($arrSum3); //Array([0] => 1 [1] => 2 [2] => 3 [username] => 張三 [age] => 12 [10] => 10 [11] => 11)
$arr5 = ['1'=>1, 'b'=>2, 'c'=>3];
$arr6 = ['b'=>2, '1'=>1, 'c'=>3];
$arr7 = [1=>1, 'b'=>2, 'c'=>3];
var_dump($arr5 == $arr6); //bool(true)
var_dump($arr5 === $arr6); //bool(false)
var_dump($arr5 === $arr7); //bool(true)
var_dump($arr5 != $arr6); //bool(false)
var_dump($arr5 !== $arr6); //bool(true)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/69424.html
標籤:PHP
上一篇:php日期函式
下一篇:php檔案函式
