飛機的 PHP 學習筆記五:陣列

飛機飛過天空發表於2020-01-18

前言

最近在系統的學習 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 : 根據 offsetlength 引數返回 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 陣列中由 offsetlength 指定的元素去掉,如果提供了 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[, ...]):intarray_pop(&array):mixed 模擬堆疊。
  • array_shift(&array, value1[, ...]):intarray_unshift(&array):mixed 模擬佇列。
  • array_flip(array):array : 陣列的鍵值互換。

感謝你看到了這裡。如果文章有錯誤,請評論指正,謝謝!

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章