PHP數組的相關操作

  • 創建數組

索引數組
索引為整數,如果沒有指定索引值則默認為零,依次遞增。

//索引數組
$array1 = array('a', 'b', 'c', 'd');

關聯數組
數組的key為字符串。

//關聯數組
$arr2 = array(   
    "a" => 1,   
    "b" => 2,   
    "c" => 3, 
    "d" => 4,
);

多維數組

//二維數組
$cars = array
(
    array("Volvo", 22, 18),
    array("BMW", 15, 13),
    array("Saab", 5, 2),
    array("Land Rover", 17, 15),
);

復合數組

//二維復合數組
$ret = array(
    'id' => 2,
    'name' => '算法',
    'children' => array(
            array('id' => 5, 'name' => 'QUERY處理'),
            array('id' => 6, 'name' => 'URL處理'),
            array('id' => 7, 'name' => '內容處理'),
            array('id' => 8, 'name' => '統計計算'),
        ),
);

range函數創建索引數組
該函數創建一個數組,包含從low到high(包含low和high)之間的整數或字符。如果high比low小,則返回反序的數組。

range(low,high,step)
$array = range(0,5);//0,1,2,3,4,5
$array = range(0,50,10);//0,10,20,30,40,50
$array = range("a","d");//a,b,c,d
  • 遍歷數組

for循環遍歷索引數組

$arr = array(1, 2, 3, 4);
for ($i = 0; $i < count($arr); $i++) {
    echo $arr[$i];//1234
};

foreach循環遍歷數組

$arr = array(
    "a" => 1,
    "b" => 2,
    "c" => 3,
    "d" => 4,
);
foreach ($arr as $key => $value) {
    var_dump($key . '=>' . $value);//a=>1b=>2c=>3d=>4
} 

each函數遍歷數組
each() 函數返回當前元素的鍵名和鍵值,并將內部指針向前移動,該元素的鍵名和鍵值會被返回帶有四個元素的數組中。兩個元素(1 和 Value)包含鍵值,兩個元素(0 和 Key)包含鍵名。如果內部指針越過了數組范圍,函數將返回 FALSE。

$sports = array('ball' => 'good', 'swim' => 'well', 'run' => 'bad');
  while ($elem = each($sports)) {
      echo $elem[0] . ': ' . $elem[1];//ball: goodswim:wellrun: bad
      echo $elem['key'] . ': ' . $elem['value'];//ball: goodswim:wellrun: bad
}

list()搭配each遍歷數組
像 array() 一樣,list不是真正的函數,而是語言結構。list()用一步操作給一組變量進行賦值。

$sports = array('ball' => 'good', 'swim' => 'well', 'run' => 'bad');
  for (; list($key, $value) = each($sports);) {
      echo $key . ': ' . $value;//ball: goodswim:wellrun: bad
}
  • 數組添加元素

賦值添加
直接對數組變量賦值$arr[key] = value。

$arr['a'] = 1;
var_dump($arr);//'a'=>1

中括號[]形式添加
如果方括號中沒有指定索引值,則取當前最大整數索引值,新的鍵名將是該值加1。如果當前還沒有整數索引,則鍵名將為0。

$arr = array('a', 'b', 'c');
$arr[] = 'd';
var_dump($arr);//'a','b','c','d'

使用array_push()函數
array_push() 函數向第一個參數的數組尾部添加一個或多個元素(入棧),然后返回新數組的長度。該函數等于多次調用 $array[] = $value。
注釋:即使數組中有字符串鍵名,您添加的元素也始終是數字鍵。
注釋:如果用 array_push() 來給數組增加一個單元,還不如用 $array[] =,因為這樣沒有調用函數的額外負擔。
注釋:如果第一個參數不是數組,array_push() 將發出一條警告。這和 $var[] 的行為不同,后者會新建一個數組。

$arr = array("red", "green");
array_push($a, "blue", "yellow");
print_r($arr);//Array ( [0] => red [1] => green [2] => blue [3] => yellow )      

使用array_unshift()函數在數組開頭添加元素
array_unshift() 函數用于向數組插入新元素。新數組的值將被插入到數組的開頭。被加上的元素作為一個整體添加,這些元素在數組中的順序和在參數中的順序一樣。該函數會返回數組中元素的個數。

$a = array("a" => "red", "b" => "green");
array_unshift($a, "blue");
print_r($a);//Array ( [0] => blue [a] => red [b] => green )
  • 數組刪除元素

使用unset()函數
銷毀指定的變量。
該函數允許取消一個數組中的鍵名,要注意數組將不會重建索引,如需重新索引,可以使用array_values()函數。

$arr = array('a', 'b', 'c');
unset($arr[1]);
var_dump($arr);//0=>'a',2=>'c'

使用array_splice()函數
array_splice() 函數從數組中移除選定的元素,并用新元素取代它。該函數也將返回包含被移除元素的數組。
array array_splice ( array &$input , int $offset [, int $length [, array $ replacement ]] )
array_splice() 把 input 數組中由 offset 和 length 指定的單元去掉,如果提供了 replacement 參數,則用 replacement 數組中的單元取代。返回一個包含有被移除單元的數組。注意 input 中的數字鍵名不被保留。如果 offset 為正,則從 input 數組中該值指定的偏移量開始移除。如果 offset 為負,則從 input 末尾倒數該值指定的偏移量開始移除。

$input = array("red", "green", "blue", "yellow");
array_splice($input, 2);
//$input is now array("red", "green")

如果省略 length,則移除數組中從 offset 到結尾的所有部分。如果指定了 length 并且為正值,則移除這么多單元。如果指定了 length 并且為負值,則移除從 offset 到數組末尾倒數 length 為止中間所有的單元。小竅門:當給出了 replacement 時要移除從 offset 到數組末尾所有單元時,用 count($input) 作為 length。

$input = array("red", "green", "blue", "yellow");
array_splice($input, 1, count($input), "orange"); 
//$input is now array("red", "orange")
$input = array("red", "green", "blue", "yellow");   
array_splice($input, -1, 1, array("black", "maroon"));
//$input is now array("red", "green", "blue", "black", "maroon") 

如果給出了 replacement 數組,則被移除的單元被此數組中的單元替代。如果 offset 和 length 的組合結果是不會移除任何值,則 replacement 數組中的單元將被插入到 offset 指定的位置。

$input = array("red", "green", "blue", "yellow");
array_splice($input, 3, 0, "purple"); 
//$input is now array("red", "green", "blue", "purple", "yellow");

array_pop()刪除數組最后一個元素
返回數組的最后一個值。如果數組是空的,或者非數組,將返回 NULL。

$a=array("red","green","blue");
array_pop($a);
print_r($a);//Array ( [0] => red [1] => green )

array_shift()刪除數組第一個元素
array_shift() 函數刪除數組中第一個元素,并返回被刪除元素的值。

$a=array("a"=>"red","b"=>"green","c"=>"blue");
array_shift($a);
print_r ($a);//Array ( [b] => green [c] => blue )

如果鍵名是數字的,所有元素都會獲得新的鍵名,從 0 開始,并以 1 遞增。

$a=array(0=>"red",1=>"green",2=>"blue");
array_shift($a);
print_r ($a);//Array ( [0] => green [1] => blue )
  • 數組修改元素

利用key值修改

$arr=('a'=>1,'b'=>2,'c'=>3);
$arr['b']=4;
print_r($arr);//'a'=>1,'b'=>4,'c'=>3
  • 數組排序

sort()函數對數組進行升序排序
按照字母升序對數組中的元素進行排序

$cars=array("Volvo","BMW","SAAB");
sort($cars);//'BMW','SAAB','Volvo'

按照字母降序對數組中的元素進行排序

$numbers=array(3,5,1,22,11);
sort($numbers);//1,3,5,11,22

rsort()函數對數組進行降序排序

$numbers=array(3,5,1,22,11);
rsort($numbers);//22,11,5,3,1

asort()函數根據值對數組排序

$age=array("Steve"=>"37","Bill"=>"35","Peter"=>"43");
asort($age);//'Bill'=>35,'Steve'=>37,'Peter'=>43

ksort()函數利用鍵對數組排序

$age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43");
ksort($age);//'Bill'=>35,'Peter'=>43,'Steve'=>37

arsort()函數對值進行逆序排序

$age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43");
arsort($age);//'Peter'=>43,'Steve'=>37,'Bill'=>35

krsort()函數對鍵進行逆序排序

$age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43");
krsort($age);//'Steve'=>37,'Peter'=>43,'Bill'=>35

array_multisort()函數進行多維數組排序
array_multisort()可以用來一次對多個數組進行排序,或者根據某一維或多維對多維數組進行排序。參數中的數組被當成一個表的列并以行來進行排序,這類似 SQL 的 ORDER BY 子句的功能。第一個數組是要排序的主要數組。數組中的行(值)比較為相同的話,就會按照下一個輸入數組中相應值的大小進行排序,依此類推。

array_multisort(array1,sorting order,sorting type,array2,array3...)
bool array_multisort ( array &$arr [, mixed $arg = SORT_ASC [, mixed $arg = SORT_REGULAR [, mixed $... ]]] )
//排序順序標志:SORT_ASC、SORT_DESC
//排序類型標志:SORT_REGULAR、SORT_NUMERIC、SORT_STRING
//Eample1:最簡單的情況,數組中的列是對應的著的。
$arr1 = array(1,3,2);
$arr2 = array(5,4,6);
array_multisort($arr1,$arr2);
print_r($arr1); // 1,2,3
print_r($arr2); // 5,6,4
//Example2:對數據庫結果進行排序,把 volume降序排列,把 edition升序排列。
$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);
//現在有了包含有行的數組,但是 array_multisort() 需要一個包含列的數組,因此用以下代碼來取得列,然后排序。
foreach ($data as $key => $row) {
    $volume[$key]  = $row['volume'];
    $edition[$key] = $row['edition'];
}
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);//array(6) { [0]=> array(2) { ["volume"]=> int(98) ["edition"]=> int(2) } [1]=> array(2) { ["volume"]=> int(86) ["edition"]=> int(1) } [2]=> array(2) { ["volume"]=> int(86) ["edition"]=> int(6) } [3]=> array(2) { ["volume"]=> int(85) ["edition"]=> int(6) } [4]=> array(2) { ["volume"]=> int(67) ["edition"]=> int(2) } [5]=> array(2) { ["volume"]=> int(67) ["edition"]=> int(7) } }
//array_multisort()函數功能很強,讀者自己參照例子和官方文檔需要細細體會
  • 數組其他常見的操作

array_keys()函數獲取數組key合集
array_keys() 函數返回包含數組中所有鍵名的一個新數組。

$arr = array('a' => 1, 'b' => 2, 'c' => 3);
$keys = array_keys($arr);
var_dump($keys);//'a','b','c'

array_values()獲取數組值合集
array_values() 函數返回一個包含給定數組中所有鍵值的數組,但不保留鍵名。

$a=array("Name"=>"Bill","Age"=>"60","Country"=>"USA");
print_r(array_values($a));//Array ( [0] => Bill [1] => 60 [2] => USA )

array_unique()函數刪除重復元素
array_unique() 函數移除數組中的重復的值,并返回結果數組。當幾個數組元素的值相等時,只保留第一個元素,其他的元素被刪除。返回的數組中鍵名不變。

$a=array("a"=>"red","b"=>"green","c"=>"red");
print_r(array_unique($a));//Array ( [a] => red [b] => green )
$a=array(1,2,3,3,4,2);
print_r(array_unique($a));//Array ( [0] => 1 [1] => 2 [2] => 3 [4] => 4 )

array_merge()合并數組
array_merge() 將一個或多個數組的單元合并起來,一個數組中的值附加在前一個數組的后面。返回作為結果的數組。如果輸入的數組中有相同的字符串鍵名,則該鍵名后面的值將覆蓋前一個值。然而,如果數組包含數字鍵名,后面的值將不會覆蓋原來的值,而是附加到后面。如果只給了一個數組并且該數組是數字索引的,則鍵名會以連續方式重新索引。

$a1=array("red","green");
$a2=array("blue","yellow");
print_r(array_merge($a1,$a2));//Array ( [0] => red [1] => green [2] => blue [3] => yellow )
$a=array(3=>"red",4=>"green");
print_r(array_merge($a));//Array ( [0] => red [1] => green )

array_slice()截取數組片段
start,開始位置。0=第一個元素。
preserve,可選。規定函數保留鍵名還是重置鍵名。true、false
array_slice(array,start,length,preserve)

$a=array("red","green","blue","yellow","brown");
print_r(array_slice($a,1,2));//Array ( [0] => green [1] => blue )

未完,待補充......

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • PHP常用函數大全 usleep() 函數延遲代碼執行若干微秒。 unpack() 函數從二進制字符串對數據進行解...
    上街買菜丶迷倒老太閱讀 1,381評論 0 20
  • php usleep() 函數延遲代碼執行若干微秒。 unpack() 函數從二進制字符串對數據進行解包。 uni...
    思夢PHP閱讀 2,002評論 1 24
  • 數組的概述 PHP 中的數組實際上是一個有序圖。圖是一種把 values 映射到 keys 的類型。此類型在很多方...
    dptms閱讀 1,633評論 0 4
  • 一、Array_key_exists();檢查給定的鍵名或索引是否存在于數組中二、array_keys ()返回數...
    peng_js閱讀 347評論 0 0
  • foreach() | list() | extract | array_map() | array_walk()...
    彭曉華閱讀 902評論 0 0