前言
最近在系統的學習 PHP ,參考的資料是《PHP程式設計》+ 官方文件(如果你有好的學習資料,歡迎推薦給我)。雖然這本《PHP程式設計》是基於 PHP5 的,但我筆記裡的程式碼,全部在 PHP 7.2 的環境裡測試過,是能夠執行的。另,本筆記中只記錄我模糊不清的知識。
索引陣列和關聯陣列
索引(indexed):鍵名是整數並且從 0 開始。
關聯(associative):鍵名是字串。
注:PHP 內部將所有的陣列都儲存為關聯陣列。
## 在陣列末尾新增值
向一個已存在的索引陣列末尾新增更多的值,可以使用 []
語法。
$family = array("Fred","Wilma");
$family[] = "Pebbles"; // $family[2] 是 "Pebbles"
如果該陣列為關聯陣列,則新增的索引為 0 。
$family = array('name' => "Wilma");
$family[] = "Pebbles"; // $family[0] 是 "Pebbles"
遍歷陣列
// 樣例陣列
$arr = array('name' => "Fred",'age' => 35,'wife' => "Wilma");
$arr1 = array("Fred", 35, "Wilma");
foreach
foreach ($arr as $val) {
echo "{$val}\n";
}
/* output
Fred
35
Wilma */
foreach ($arr as $key => $value) {
echo "Fred's {$key} is {$value}\n";
}
/* output
Fred's name is Fred
Fred's age is 35
Fred's wife is Wilma */
迭代器
每個 PHP 陣列都會跟蹤當前所處理的元素,指向當前元素的指標被稱為迭代器。迭代器的函式如下:
current(&array):mixed
: 返回迭代器當前指向的元素reset(&array):mixed
: 移動迭代器到陣列中第一個元素next(&array):mixed
: 移動迭代器到陣列下一個元素prev(&array):mixed
: 移動迭代器到陣列上一個元素end(&array):mixed
: 移動迭代器到陣列中最後一個元素each(&array):array
: 以陣列的形式返回當前元素的鍵和值,並移動迭代器到下一個元素。key(&array):mixed
: 返回當前元素的鍵
while (list($key, $value) = each($arr)) {
echo "Fred's {$key} is {$value}\n";
} // 會彈出警告
/* output
Fred's name is Fred
Fred's age is 35
Fred's wife is Wilma */
for
$arr1count = count($arr1);
for ($i = 0; $i < $arr1count; $i++) {
$value = $arr1[$i];
echo "{$value}\n";
}
/* output
Fred
35
Wilma */
排序
效果 | 升序 | 降序 | 使用者自定義函式 |
---|---|---|---|
按值排序陣列,然後從 0 開始重新分配索引 | sort() | rsort() | usort(&array, callback) |
按值排序 | asort() | arsort() | uasort(&array, callback) |
按鍵排序 | ksort() | krsort() | uksort(&array, callback) |
natsort(&array):bool
: 按照自然順序,升序排序。natcasesort(&array):bool
: 不區分大小寫,按照自然順序,升序排序。array_multisort()
: 對多個索引陣列進行排序。
陣列函式
array(…):array
: 建立一個陣列。count(array)
和sizeof(array)
獲取陣列中元素的個數。list(varl[, …]):array
: 不是真正的函式,而是一個語言結構。它會把陣列中的值賦給一組變數。array_slice(array, offset, length=NULL):array
: 根據offset
和length
引數返回array
陣列中的一段序列。array_chunk(array, size[, preserve_keys = false]):array
: 將一個陣列分割成多個陣列,其中每個陣列的單元數目由size
決定。第三個引數preserve_keys
設定為true
可以保留陣列中原來的鍵名,預設從零開始新數字索引。array_keys(array[, search_value=null[, strict=false]]):array
: 返回array
陣列中的鍵名。如果指定search_value
,則只返回該值的鍵名,否則將返回全部鍵名。strict
則是指定搜尋時是否使用嚴格模式( === )。array_values(array):array
: 返回array
陣列中值的陣列。array_key_exists(key,array):bool
: 檢查陣列裡是否有指定的key
。如果該鍵的值為NULL
,該函式將返回true
。isset(var[, ...]):bool
: 檢查變數是否存在,並且不為NULL
。array_splice(array1, offset[, length=count(array1)[, replacement=array()]]):array
: 把array1
陣列中由offset
和length
指定的元素去掉,如果提供了replacement
引數,則用其中的元素取代。extract(&array[, flags=EXIR_OVERWRITE[, prefix=NULL]]):int
: 將變數從陣列中匯入到當前的符號表中。compact(varname1[, ...]):array
: 建立一個包含變數名與其值的陣列。該函式會建立一個關聯陣列。array_walk(&array, callback, $userdata=NULL):bool
: 為陣列中的每個元素呼叫使用者自定義的函式。自定義函式接受三個引數:第一個是元素的值,第二個是元素的鍵,第三個是array_walk()
的第三個引數。array_reduce()
: 與array_walk()
引數相同,不同的是,他將依次迭代陣列每個元素得到單個值。in_array(needle, haystack[, strict=false]):bool
: 在haystack
中搜尋needle
是否存在,strict
將設定是否嚴格匹配。array_fliter(array, callback[, flag=0]):array
: 使用callback
函式來過濾array
。array_push(&array, value1[, ...]):int
和array_pop(&array):mixed
模擬堆疊。array_shift(&array, value1[, ...]):int
和array_unshift(&array):mixed
模擬佇列。array_flip(array):array
: 陣列的鍵值互換。
感謝你看到了這裡。如果文章有錯誤,請評論指正,謝謝!
本作品採用《CC 協議》,轉載必須註明作者和本文連結