PHP數(shù)組的相關(guān)操作

  • 創(chuàng)建數(shù)組

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

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

關(guān)聯(lián)數(shù)組
數(shù)組的key為字符串。

//關(guān)聯(lián)數(shù)組
$arr2 = array(   
    "a" => 1,   
    "b" => 2,   
    "c" => 3, 
    "d" => 4,
);

多維數(shù)組

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

復(fù)合數(shù)組

//二維復(fù)合數(shù)組
$ret = array(
    'id' => 2,
    'name' => '算法',
    'children' => array(
            array('id' => 5, 'name' => 'QUERY處理'),
            array('id' => 6, 'name' => 'URL處理'),
            array('id' => 7, 'name' => '內(nèi)容處理'),
            array('id' => 8, 'name' => '統(tǒng)計計算'),
        ),
);

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

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
  • 遍歷數(shù)組

for循環(huán)遍歷索引數(shù)組

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

foreach循環(huán)遍歷數(shù)組

$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函數(shù)遍歷數(shù)組
each() 函數(shù)返回當(dāng)前元素的鍵名和鍵值,并將內(nèi)部指針向前移動,該元素的鍵名和鍵值會被返回帶有四個元素的數(shù)組中。兩個元素(1 和 Value)包含鍵值,兩個元素(0 和 Key)包含鍵名。如果內(nèi)部指針越過了數(shù)組范圍,函數(shù)將返回 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遍歷數(shù)組
像 array() 一樣,list不是真正的函數(shù),而是語言結(jié)構(gòu)。list()用一步操作給一組變量進行賦值。

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

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

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

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

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

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

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

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

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

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

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

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

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

如果省略 length,則移除數(shù)組中從 offset 到結(jié)尾的所有部分。如果指定了 length 并且為正值,則移除這么多單元。如果指定了 length 并且為負值,則移除從 offset 到數(shù)組末尾倒數(shù) length 為止中間所有的單元。小竅門:當(dāng)給出了 replacement 時要移除從 offset 到數(shù)組末尾所有單元時,用 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 數(shù)組,則被移除的單元被此數(shù)組中的單元替代。如果 offset 和 length 的組合結(jié)果是不會移除任何值,則 replacement 數(shù)組中的單元將被插入到 offset 指定的位置。

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

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

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

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

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

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

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

利用key值修改

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

sort()函數(shù)對數(shù)組進行升序排序
按照字母升序?qū)?shù)組中的元素進行排序

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

按照字母降序?qū)?shù)組中的元素進行排序

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

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

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

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

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

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

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

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

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

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

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

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

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:最簡單的情況,數(shù)組中的列是對應(yīng)的著的。
$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:對數(shù)據(jù)庫結(jié)果進行排序,把 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);
//現(xiàn)在有了包含有行的數(shù)組,但是 array_multisort() 需要一個包含列的數(shù)組,因此用以下代碼來取得列,然后排序。
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()函數(shù)功能很強,讀者自己參照例子和官方文檔需要細細體會
  • 數(shù)組其他常見的操作

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

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

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

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

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

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

$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()截取數(shù)組片段
start,開始位置。0=第一個元素。
preserve,可選。規(guī)定函數(shù)保留鍵名還是重置鍵名。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 )

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容