PHP學習記錄(數組函數)

數組

php中的數組是一個有序映射,映射是一種把values關聯到keys的類型,數組能夠接受任意數量用逗號分隔符的鍵值對。php

數組的介紹數組

/*
 * 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';  //利用[]對數組進行擴展,爲數組新添元素

鍵名類型的自動轉換code

$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 = 'wangzhao_hb@126.com';

$arr = compact('username', 'age', 'email');  //經過將已有變量名放在函數中快速生成關聯數組
//Array([username] => zhao [age] => 22 [email] => wangzhao_hb@126.com)
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)

數組運算符string

/*
 * 經常使用的數組運算符:
 * +:合併數組,若是鍵名相同,只展現左邊數組的鍵值對
 * ==:比較數組的鍵名和對應的鍵值是否相同,若是相同返回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)
相關文章
相關標籤/搜索