PHP數組常用方法(優化版)

目錄

前言

  • 鑑於我2年前寫的這一篇 PHP數組常用方法 可讀性不太好,我現在用markdown來修改一下

內容:

一、判斷/查找:

1、is_array — 檢測變量是否是數組

1、語法

  • bool is_array ( mixed $var ) //如果 var 是 array,則返回 TRUE,否則返回 FALSE。

2、使用

$arr = [];
$arr1 = 99;
var_dump(is_array($arr));    //輸出 bool(true)
var_dump(is_array($arr1));    //輸出 bool(false)

3、類似的方法

1)、is_int — 檢測變量是否是整數

  • bool is_int ( mixed $var ) //如果 var 是 integer 則返回 TRUE,否則返回 FALSE。
  • is_integer — is_int() 的別名

2)、is_numeric — 檢測變量是否爲數字或數字字符串

  • bool is_numeric ( mixed $var ) //如果 var 是數字和數字字符串則返回 TRUE,否則返回 FALSE。
  • Note:若想測試一個變量是否是數字或數字字符串(如表單輸入,它們通常爲字符串),必須使用 is_numeric()。

3)、is_bool — 檢測變量是否是布爾型

  • bool is_bool ( mixed $var ) //如果 var 是 boolean 則返回 TRUE。

4)、is_float — 檢測變量是否是浮點型

  • bool is_float ( mixed $var ) //如果 var 是 float 則返回 TRUE,否則返回 FALSE。
  • is_real — is_float() 的別名

5)、is_string — 檢測變量是否是字符串

  • bool is_string ( mixed $var ) //如果 var 是 string 則返回 TRUE,否則返回 FALSE。

6)、is_object — 檢測變量是否是一個對象

  • bool is_object ( mixed $var ) //如果 var 是一個 object 則返回 TRUE,否則返回 FALSE。

2、in_array — 檢查數組中是否存在某個值

1、語法

  • bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] ) //大海撈針,在大海(haystack)中搜索針( needle),如果沒有設置 strict 則使用寬鬆的比較。

  • 參數說明:

參數 說明
needle 待搜索的值。 (如果 needle 是字符串,則比較是區分大小寫的。)
haystack 待搜索的數組。
strict 如果第三個參數 strict 的值爲 TRUE 則 in_array() 函數還會檢查 needle 的類型是否和 haystack 中的相同。
  • 返回值:
    如果找到 needle 則返回 TRUE,否則返回 FALSE。

2、使用

//區分大小寫
$fruits = [ "Apple", "Pear", "Bana", "Orange" ];
if (in_array("Apple", $fruits)) {
    echo "Apple ";
}
if (in_array("apple", $fruits)) {
    echo "apple ";
}
//開啓嚴格檢查
$number = [ 13, 14, 15, 16 ];
if (in_array("13", $number, true)) {
    echo "string 13";
}
if (in_array(13, $number, true)) {
    echo "int 13";
}
  • 返回:Apple int 13

3、array_key_exists — 檢查數組裏是否有指定的鍵名或索引

1、語法

  • bool array_key_exists ( mixed $key , array $array ) // 數組裏有鍵 key 時,array_key_exists() 返回 TRUE。 key 可以是任何能作爲數組索引的值。
  • 參數說明:
參數 說明
key 要檢查的鍵
array 一個數組,包含待檢查的鍵
  • 返回值
    成功時返回 TRUE, 或者在失敗時返回 FALSE。

  • Note
    array_key_exists() 僅僅搜索第一維的鍵。 多維數組裏嵌套的鍵不會被搜索到。

2、使用

$array = [ 1,2,3,4 ];
var_dump(array_key_exists(0, $array));    //輸出 bool(true)

注意:isset() 對於數組中爲 NULL 的值不會返回 TRUE,而 array_key_exists() 會。

$search_array = array('first' => null, 'second' => 4);
var_dump(isset($search_array['first']));            //輸出 bool(false)
var_dump(array_key_exists('first', $search_array));    //輸出 bool(true)

4、array_search — 在數組中搜索給定的值,如果成功則返回首個相應的鍵名

1、語法

  • mixed array_search ( mixed $needle , array $haystack [, bool $strict = false ] ) //大海撈針,在大海(haystack)中搜索針( needle 參數)。
  • 參數說明
參數 說明
needle 搜索的值。 (如果 needle 是字符串,則比較以區分大小寫的方式進行。 )
haystack 這個數組。
strict 如果可選的第三個參數 strict 爲 TRUE,則 array_search() 將在 haystack 中檢查完全相同的元素。這意味着同樣嚴格比較 haystack 裏 needle 的 類型,並且對象需是同一個實例。
  • 返回值
    • 如果找到了 needle 則返回它的鍵,否則返回 FALSE。
    • 如果 needle 在 haystack 中出現不止一次,則返回第一個匹配的鍵。要返回所有匹配值的鍵,應該用 array_keys() 加上可選參數 search_value 來代替。

2、使用

$array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red');
$key = array_search('green', $array); // $key = 2;
$key = array_search('red', $array);   // $key = 1;

5、array_keys — 返回數組中部分的或所有的鍵名

1、語法

  • array array_keys ( array $array [, mixed $search_value = null [, bool $strict = false ]] )
    • array_keys() 返回 input 數組中的數字或者字符串的鍵名。
    • 如果指定了可選參數 search_value,則只返回該值的鍵名。否則 input 數組中的所有鍵名都會被返回。
  • 參數說明:
參數 說明
input 一個數組,包含了要返回的鍵。
search_value 如果指定了這個參數,只有包含這些值的鍵纔會返回。
strict 判斷在搜索的時候是否該使用嚴格的比較(===)。

2、使用:

  • 代碼:
$array = array(0 => 100, "color" => "red");
print_r(array_keys($array));

$array = array("blue", "red", "green", "blue", "blue");
print_r(array_keys($array, "blue"));

$array = array("color" => array("blue", "red", "green"),
    "size"  => array("small", "medium", "large"));
print_r(array_keys($array));
  • 返回:
Array
(
    [0] => 0
    [1] => color
)
Array
(
    [0] => 0
    [1] => 3
    [2] => 4
)
Array
(
    [0] => color
    [1] => size
)

6、array_values — 返回數組中所有的值

1、語法

  • array array_values ( array $array ) //array_values() 返回 input 數組中所有的值並給其建立數字索引。

2、使用:

$array = [
    [1,2],
    [3,4]
];
var_export(array_values($array));
  • 返回
array ( 0 => array ( 0 => 1, 1 => 2, ), 1 => array ( 0 => 3, 1 => 4, ), )

7、count — 計算數組中的單元數目,或對象中的屬性個數 別名 sizeof()

1、語法

  • int count ( mixed $array_or_countable [, int $mode = COUNT_NORMAL ] )

二、合併/增加:

1、array_combine — 創建一個數組,用一個數組的值作爲其鍵名,另一個數組的值作爲其值

1、語法

  • array array_combine ( array $keys , array $values ) //返回一個 array,用來自 keys 數組的值作爲鍵名,來自 values 數組的值作爲相應的值。
  • 參數說明:
參數 說明
keys 將被作爲新數組的鍵。非法的值將會被轉換爲字符串類型(string)
values 將被作爲 Array 的值。
  • 返回值
    返回合併的array,如果兩個數組的單元數不同則返回 FALSE。
  • 錯誤/異常
    如果作爲keys的數組和作爲values的數組的元素個數不一樣,將會拋出一個警告錯誤(E_WARNING)。

2、使用:

$a = [ 1,2,3, 4,5,6 ];
$b = ['one', 'tow', 'three', 'four', 'five', 'six'];
$c = array_combine($a, $b);
var_expor

2、array_shift — 將數組開頭的單元移出數組

1、語法

  • mixed array_shift ( array &$array ) //array_shift() 將 array 的第一個單元移出並作爲結果返回,將 array 的長度減一併將所有其它單元向前移動一位。所有的數字鍵名將改爲從零開始計數,文字鍵名將不變。
  • Note
    使用此函數後會重置(reset())array 指針。
  • 返回值
    返回移出的值,如果 array 爲 空或不是一個數組則返回 NULL

2、使用:

$stack = array("orange", "banana", "apple", "raspberry");
$fruit = array_shift($stack);
var_export($stack);    //array ( 0 => 'banana', 1 => 'apple', 2 => 'raspberry', )
var_export($fruit);    //'orange'

3、array_pop — 彈出數組最後一個單元(出棧)

1、語法

  • mixed array_pop ( array &$array ) //彈出並返回 array 數組的最後一個單元,並將數組 array 的長度減一。
  • Note
    使用此函數後會重置(reset())array 指針。
  • 返回值
    返回 array 的最後一個值。如果 array 是空(如果不是一個數組),將會返回 NULL 。

2、使用

$stack = array("orange", "banana", "apple", "raspberry");
$fruit = array_pop($stack);
var_export($stack);    //array ( 0 => 'orange', 1 => 'banana', 2 => 'apple', )
var_export($fruit);    //'raspberry'

4、array_unshift — 在數組開頭插入一個或多個單元

1、語法

  • int array_unshift ( array &$array , mixed $value1 [, mixed $… ] ) //array_unshift() 將傳入的單元插入到 array 數組的開頭。
  • 注意單元是作爲整體被插入的,因此傳入單元將保持同樣的順序。所有的數值鍵名將修改爲從零開始重新計數,所有的文字鍵名保持不變。
  • 參數說明:
參數 說明
array 輸入的數組。
value1 開頭插入的變量。
  • 返回
    返回 array 數組新的單元數目。

2、 使用:

$queue = array("orange", "banana");
$cnt = array_unshift($queue, "apple", "raspberry");
var_export($queue);    //array ( 0 => 'apple', 1 => 'raspberry', 2 => 'orange', 3 => 'banana', )
var_export($cnt);    //4

5、array_push — 將一個或多個單元壓入數組的末尾(入棧)

1、語法:

  • int array_push ( array &$array , mixed $value1 [, mixed $… ] )
    • array_push() 將 array 當成一個棧,並將傳入的變量壓入 array 的末尾。array 的長度將根據入棧變量的數目增加。
    • 和如下效果相同:
      $array[] = $var;
      如果用 array_push() 來給數組增加一個單元,還不如用 $array[] = ,因爲這樣沒有調用函數的額外負擔。
  • 參數說明:
參數 說明
array 輸入的數組。
value1 要壓入 array 末尾的第一個值。
  • 返回值:返回處理之後數組的元素個數。

2、使用:

$queue = array("orange", "banana");
$cnt = array_push($queue, "apple", "raspberry");
var_export($queue);    //array ( 0 => 'orange', 1 => 'banana', 2 => 'apple', 3 => 'raspberry', )
var_export($cnt);    //4

三、截取/重組:

1、array_slice — 從數組中取出一段

1、語法

  • array array_slice ( array $array , int $offset [, int $length = NULL [, bool $preserve_keys = false ]] )
  • //array_slice() 返回根據 offset 和 length 參數所指定的 array 數組中的一段序列。
  • 參數說明:
參數 說明
array 輸入的數組。
offset 如果 offset 非負,則序列將從 array 中的此偏移量開始。如果 offset 爲負,則序列將從 array 中距離末端這麼遠的地方開始。
length 如果給出了 length 並且爲正,則序列中將具有這麼多的單元。如果給出了 length 並且爲負,則序列將終止在距離數組末端這麼遠的地方。如果省略,則序列將從 offset 開始一直到 array 的末端。。
preserve_keys array_slice默認會重新排序並重置數組的數字索引。你可以通過將 preserve_keys 設爲 TRUE 來改變此行爲。
  • 返回值:
    返回其中一段。 如果 offset 參數大於 array 尺寸,就會返回空的 array。

2、使用:

$input = array( 3=>"a", 2=>"c", 5=>"b", 1=>"e", 4=>"d");
$output1 = array_slice($input, 2);                 //array ( 0 => 'b', 1 => 'e', 2 => 'd', )
$output2 = array_slice($input, -2, 1);          //array ( 0 => 'e', )
$output3 = array_slice($input, 0, 3);           //array ( 0 => 'a', 1 => 'c', 2 => 'b', )
$output4 = array_slice($input, -2, 1, true);      //array ( 1 => 'e', )
$output5 = array_slice($input, 0, 3, true);       //array ( 3 => 'a', 2 => 'c', 5 => 'b', )

2、array_column — 返回數組中指定的一列

1、語法

  • array array_column ( array $input , mixed $column_key [, mixed $index_key = null ] )
  • //array_column() 返回input數組中鍵值爲column_key的列, 如果指定了可選參數index_key,那麼input數組中的這一列的值將作爲返回數組中對應值的鍵。
  • 參數說明:
參數 說明
input 被操作數組
column_key 需要返回值的列
index_key 作爲返回數組的索引/鍵的列

2、使用:

$array = [
    ['id'=>999, 'name'=>'aaa'],
    ['id'=>777, 'name'=>'ccc'],
    ['id'=>888, 'name'=>'bbb'],
];
$arr =  array_column($array, 'name');
$arr1 = array_column($array, 'name', 'id');
var_export($arr);    //array ( 0 => 'aaa', 1 => 'ccc', 2 => 'bbb', )
var_export($arr1);    //array ( 999 => 'aaa', 777 => 'ccc', 888 => 'bbb', )

四、排序:

1、一維數組排序:以sort爲例:

1、語法

  • bool sort ( array &$array [, int $sort_flags = SORT_REGULAR ] )
  • 參數說明:
參數 說明
array 要排序的數組。
sort_flags 可選的第二個參數 sort_flags 可以用以下值改變排序的行爲:
  • sort_flags值爲:

    • SORT_REGULAR - 正常比較單元(不改變類型)
    • SORT_NUMERIC - 單元被作爲數字來比較
    • SORT_STRING - 單元被作爲字符串來比較
    • SORT_LOCALE_STRING - 根據當前的區域(locale)設置來把單元當作字符串比較,可以用 setlocale() 來改變。
    • SORT_NATURAL - 和 natsort() 類似對每個單元以“自然的順序”對字符串進行排序。 PHP 5.4.0 中新增的。
    • SORT_FLAG_CASE - 能夠與 SORT_STRING 或 SORT_NATURAL 合併(OR 位運算),不區分大小寫排序字符
  • 返回值:成功時返回 TRUE, 或者在失敗時返回 FALSE。

  • 類似函數:

    • sort() - 根據值,以升序對數組排序[索引重置]
    • rsort() - 根據值,以降序對數組排序[索引重置]
    • asort() - 根據值,以升序對關聯數組進行排序[保持索引關係]
    • ksort() - 根據鍵,以升序對關聯數組進行排序[保持索引關係]
    • arsort() - 根據值,以降序對關聯數組進行排序[保持索引關係]
    • krsort() - 根據鍵,以降序對關聯數組進行排序[保持索引關係]

2、使用:

  • 代碼:
$array1 = [ 3=>'three', 5=>'five', 4=>'four', 1=>'one', 2=>'two' ];
$array = $array1; sort($array);     var_export($array);    echo '<br/>';
$array = $array1; rsort($array);    var_export($array); echo '<br/>';
$array = $array1; asort($array);    var_export($array); echo '<br/>';
$array = $array1; ksort($array);    var_export($array); echo '<br/>';
$array = $array1; arsort($array);    var_export($array); echo '<br/>';
$array = $array1; krsort($array);    var_export($array); echo '<br/>';
  • 打印:
array ( 0 => 'five', 1 => 'four', 2 => 'one', 3 => 'three', 4 => 'two', )
array ( 0 => 'two', 1 => 'three', 2 => 'one', 3 => 'four', 4 => 'five', )
array ( 5 => 'five', 4 => 'four', 1 => 'one', 3 => 'three', 2 => 'two', )
array ( 1 => 'one', 2 => 'two', 3 => 'three', 4 => 'four', 5 => 'five', )
array ( 2 => 'two', 3 => 'three', 1 => 'one', 4 => 'four', 5 => 'five', )
array ( 5 => 'five', 4 => 'four', 3 => 'three', 2 => 'two', 1 => 'one', )

2、多維數組排序:array_multisort — 對多個數組或多維數組進行排序

1、 語法:

  • bool array_multisort ( array &$array1 [, mixed $array1_sort_order = SORT_ASC [, mixed $array1_sort_flags = SORT_REGULAR [, mixed $… ]]] )
  • array_multisort() 可以用來一次對多個數組進行排序,或者根據某一維或多維對多維數組進行排序。
  • 參數說明:
參數 說明
array1 要排序的 array。
array1_sort_order 之前 array 參數要排列的順序。 SORT_ASC 按照上升順序排序, SORT_DESC 按照下降順序排序。 [此參數可以和 array1_sort_flags 互換],也可以完全刪除,默認是 SORT_ASC 。
array1_sort_flags 爲 array 參數設定選項(同一維數組)
  • 返回
    成功時返回 TRUE, 或者在失敗時返回 FALSE。

2、使用

1)、多個數組排序
$arr = [ 3, 7, 6, 1 ];
$arr2 = [ 'three', 'seven', 'six', 'one' ];
$arr3 = [ 6, 14, 12, 2 ];
array_multisort($arr, $arr2, $arr3);
var_export($arr); echo '<br/>';        //array ( 0 => 1, 1 => 3, 2 => 6, 3 => 7, )
var_export($arr2); echo '<br/>';    //array ( 0 => 'one', 1 => 'three', 2 => 'six', 3 => 'seven', )
var_export($arr3); echo '<br/>';    //array ( 0 => 2, 1 => 6, 2 => 12, 3 => 14, )
  • 分析
    • 如果多個數組的元素個數不同,則報錯;
    • 第一個項目排序之後,其他的項目的位置也跟隨第一個項目的位置移動了。
2)、排序多維數組
$arr = [
    [ 9, '7', 6, 1, 3 ],
    [ 'nine', 'seven', '6', 1, 3 ],
];
array_multisort($arr[0], SORT_ASC, SORT_STRING,    //array1_sort_order與array1_sort_flags參數位置可互換
    $arr[1], SORT_NUMERIC, SORT_DESC);
var_export($arr);    //array ( 0 => array ( 0 => 1, 1 => 3, 2 => 6, 3 => '7', 4 => 9, ), 1 => array ( 0 => 1, 1 => 3, 2 => '6', 3 => 'seven', 4 => 'nine', ), )
  • 分析:
    • $arr[0]被當作字符串以升序排列;$arr[1]被當作數字以降序排列。
      -[返回的怎麼還是和1)、一樣的,$arr[1]的順序完全取決於$arr[0]]...???
3)、對數據庫查詢結果進行排序
  • 代碼:
//先根據like降序,然後根據age升序
$arr = [
    ['like'=>99, 'age'=>18],
    ['like'=>77, 'age'=>23],
    ['like'=>111, 'age'=>8],
    ['like'=>66, 'age'=>24],
    ['like'=>33, 'age'=>21],
    ['like'=>99, 'age'=>31],
];
$likeArr = array_column($arr, 'like');
$ageArr = array_column($arr, 'age');
array_multisort($likeArr, SORT_DESC, $ageArr, SORT_ASC, $arr);
var_export($arr);
  • 打 印
array ( 0 => array ( 'like' => 111, 'age' => 8, ),
    1 => array ( 'like' => 99, 'age' => 18, ),
    2 => array ( 'like' => 99, 'age' => 31, ),
    3 => array ( 'like' => 77, 'age' => 23, ),
    4 => array ( 'like' => 66, 'age' => 24, ),
    5 => array ( 'like' => 33, 'age' => 21, ),
)

五、並集/交集/差集:

1、array_merge — 合併一個或多個數組(索引重置)

1、語法

  • array array_merge ( array $array1 [, array $… ] )
    • 將一個或多個數組的單元合併起來,一個數組中的值附加在前一個數組的後面。返回作爲結果的數組。
    • 如果輸入的數組中有相同的字符串鍵名,則該鍵名後面的值將覆蓋前一個值。
    • 然而,如果數組包含相同的數字鍵名,後面的值將不會覆蓋原來的值,而是附加到後面。
  • 參數說明:
參數 說明
array1 要合併的第一個數組
要合併的n個數組
  • 返回值
    返回結果數組

2、使用:

1)、字符串鍵名相同
$arr1 = ['color'=>'red', 1, 3, 1=>'one'];
$arr2 = ['color'=>'blue', 'hobby'=>'eat', 2 ];
$arr3 = array_merge($arr1, $arr2);
var_export($arr3);    //array ( 'color' => 'blue', 0 => 1, 1 => 'one', 'hobby' => 'eat', 2 => 2, )
//$arr1 0=>1, 1=>3, 1=>'one' 後面的one覆蓋了前面的3
2)、數組鍵名相同
$arr1 = [1=>'one', 1, 3, ];
$arr2 = [1=>'nine', 'hobby'=>'eat', 2 ];
$arr3 = array_merge($arr1, $arr2);
var_export($arr3);    //array ( 0 => 'one', 1 => 1, 2 => 3, 3 => 'nine', 'hobby' => 'eat', 4 => 2, )
3)、正常合併
$arr1 = [1=>'one', 1, 3, ];
$arr3 = array_merge($arr1, ['age'=>99]);
var_export($arr3);    //array ( 0 => 'one', 1 => 1, 2 => 3, 'age' => 99, )
4)、如果你想完全保留原有數組並只想新的數組附加到後面,用 + 運算符: 在兩個數組中存在相同的鍵名時,第一個數組中的同鍵名的元素將會被保留,第二個數組中的元素將會被忽略
$arr1 = ['color'=>'red', 1, 3, 1=>'one'];
$arr2 = ['color'=>'blue', 'hobby'=>'eat', 1=>'nine', 2 ];
$arr3 = $arr1 + $arr2;
var_export($arr3);    //array ( 'color' => 'red', 0 => 1, 1 => 'one', 'hobby' => 'eat', 2 => 2, )
5)、其他類型
(1)、合併空數組
$arr1 = [];
$arr2 = [99=>'abc'];
$arr3 = array_merge($arr1,$arr2);
var_export($arr3);    // array ( 0 => 'abc', )
(2)、合併非數組
$str = 'aaa';
$arr2 = [99=>'bbb'];
$arr3 = array_merge( (array)$str,$arr2 );
var_export($arr3);    // array ( 0 => 'aaa', 1 => 'bbb', )

2、array_intersect — 計算數組的交集

1、語法

  • array array_intersect ( array $array1 , array $array2 [, array $… ] )
    • //返回一個數組,該數組包含了所有在 array1 中也同時出現在所有其它參數數組中的值。注意array1鍵名保留不變。
  • 參數說明
參數 說明
array1 要檢查的數組,作爲主值。
array2 要被對比的數組。
要對比的數組列表。
  • 返回
    返回一個數組,該數組包含了所有在 array1 中也同時出現在所有其它參數數組中的值。

2、使用:

1)、
$arr1 = ['color'=>'blue', 1, 2, 1=>'one'];
$arr2 = ['attr'=>'blue', 2 ];
$arr3 = array_intersect($arr1, $arr2);
var_export($arr3);    //array ( 'color' => 'blue', )
  • 分析
    爲什麼輸出的結果中沒有2,原因:因爲$arr1中的2的鍵是1,被後面的’one’給覆蓋了…
2)、改一下1)、中的 1=>‘one’ 爲 2=>‘one’
$arr1 = ['color'=>'blue', 1, 2, 2=>'one'];
$arr2 = ['attr'=>'blue', 2 ];
$arr3 = array_intersect($arr1, $arr2);
var_export($arr3);    //array ( 'color' => 'blue', 1 => 2, )

3、array_intersect_assoc — 帶索引檢查計算數組的交集

  • (同2[array_intersect],只是鍵名也要比較)

4、array_diff — 計算數組的差集

1、語法

  • array array_diff ( array $array1 , array $array2 [, array $… ] )
    • //對比 array1 和其他一個或者多個數字,返回在 array1 中但是不在其他 array 裏的值。
  • 參數說明:
參數 說明
array1 要被對比的數組
array2 和這個數組進行比較
更多相比較的數組
  • 返回值
    返回一個數組,該數組包括了所有在 array1 中但是不在任何其它參數數組中的值。注意array1鍵名保留不變。

2、使用:

$arr1 = ['color'=>'blue', 1, 2, 2=>'one'];
$arr2 = ['attr'=>'blue', 2 ];
$arr3 = array_diff($arr1, $arr2);
var_export($arr3);    //array ( 0 => 1, 2 => 'one', )
  • Note
    注意本函數只檢查了多維數組中的一維。當然可以用 array_diff($array1[0], $array2[0]); 檢查更深的維度。

5、array_diff_assoc — 帶索引檢查計算數組的差集

  • (同4[array_diff],只是鍵名也要比較)

六、循環:

1、foreach()循環:foreach 僅能夠應用於數組和對象

1、語法:

foreach (array_expression as $value)
   statement

foreach (array_expression as $key => $value)
	statement

2、使用:

$arr = [1, 2, 3, 4, 5];
foreach ($arr as &$value) {
    $value = $value * 2;
}
//array is [2,4,6,8,10]
unset($value); // 最後取消掉引用

3、foreach與list異曲同工

(1)、功能完全相同
$arr = array("one", "two", "three");
reset($arr);
while (list(, $value) = each($arr)) {
    echo "Value: $value<br>\n";
}

foreach ($arr as $value) {
    echo "Value: $value<br />\n";
}
(2)、功能完全相同
$arr = array("one", "two", "three");
reset($arr);
while (list($key, $value) = each($arr)) {
    echo "Key: $key; Value: $value<br />\n";
}

foreach ($arr as $key => $value) {
    echo "Key: $key; Value: $value<br />\n";
}

4、用 list() 給嵌套的數組解包

(1)、list單元等於嵌套數組的
$array = [
    [1,2],
    [3,4]
];
foreach($array as list($a, $b)){
    echo "A:{$a}; B:{$b}<br/>";
}
  • 打印:
A:1; B:2
A:3; B:4
(2)、list單元少於嵌套數組的,多出來的被忽略
$array = [
    [1,2],
    [3,4]
];
foreach($array as list($a)){
    echo "A:{$a};<br/>";
}
  • 打印:
A:1;
A:3;
(3)、list單元多於嵌套數組則會發出一條消息級別的錯誤信息
$array = [
    [1,2],
    [3,4]
];
foreach($array as list($a, $b, $c)){
    echo "A:{$a}; B:{$b}; C:{$c}<br/>";
}
  • 打 印:
Notice: Undefined offset: 2 in Test.php on line 17
A:1; B:2; C:
Notice: Undefined offset: 2 in Test.php on line 17
A:3; B:4; C:

2、for循環數組自增

$data = [];
for($x=0;$x<4;$x++){
    $data[] = ['id'=>$x+1, 'val'=>mt_rand(10,99)];
}
var_export($data);    //array ( 0 => array ( 'id' => 1, 'val' => 70, ), 1 => array ( 'id' => 2, 'val' => 81, ), 2 => array ( 'id' => 3, 'val' => 27, ), 3 => array ( 'id' => 4, 'val' => 63, ), )
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章