1. 程式人生 > >PHP 數組

PHP 數組

php 數組

PHP 中數組有兩種模式:索引數組和關聯數組。索引數組使用數字作為鍵,

而關聯數組則使用字符串作為鍵。 打印數組 print_r() var_dump() var_export();


使用 list 函數將元素值返回至變量

//使用 list 函數

list($name, $age, $gender) = array(‘張三‘, 33, ‘男‘);

//輸出元素值的變量

echo $name.‘的性別是:‘.$gender.‘,今年‘.$age.‘歲‘;

//只獲取姓名和性別

list($name,,$gender) = array(‘張三‘, 33, ‘男‘)


元素值的增減

1.第一種增加數組元素值的方法:數組名+[] = 元素值,即可在數組尾部增加一個元

素值。

//原數組

$phone = array(‘蘋果‘, ‘華為‘, ‘三星‘, ‘小米‘, ‘魅族‘, ‘錘子‘);

//在數組尾部添加一個元素值

$phone[] = ‘OPPO‘; //或$phone[‘R9‘] = ‘OPPO‘實現關聯數組元素增加

2.使用 array_unshift 函數從數組頭部增加元素值

//在頭部添加元素值,數值索引將重新計算,字符串索引保持不變

array_unshift($phone, ‘OPPO‘, ‘金立‘);

3.使用 array_push 函數從數組尾部增加元數值

//在尾部添加元素值,類似$phone[] = ‘OPPO‘

array_push($phone, ‘OPPO‘, ‘金立‘);

4.使用 array_shift 函數從數組頭開始刪除

//從數組開頭刪除一個元素值,數值索引重新計算,字符串索引不變

array_shift($phone);

5.使用 array_pop 函數從數組結尾開始刪除

//從數組結尾刪除一個元素值

array_pop($phone);

6.使用 array_splice 函數刪除或插入元素值

//從位置 2(第三個元素開始),刪除 3 個

array_splice($phone, 2, 3);

//從位置 2(第三個元素開始),刪除至末尾

array_splice($phone, 2);


元素值的遍歷

大多數情況下,我們需要將數組裏所有的數據遍歷出來,再按照指定的格式:比如二維

表格的形式展現出來。此時,我們需要一些帶有循環能力的語句。

1.foreach 遍歷

//最推薦常用的遍歷方式

foreach ($phone as $key=>$value) {

echo $key.‘|‘.$value.‘<br>‘;

}

2.for 循環

//這種只能遍歷數值索引數組,字符串索引沒有 key

for ($i = 0; $i < 6; $i++) {

echo $phone[$i].‘<br>‘;

}


數組判斷操作

1.使用 in_array 函數可以判斷一個元素是否在這個數組中。

//數組

$phone = array(‘蘋果‘, ‘華為‘, ‘三星‘, ‘小米‘, ‘魅族‘, ‘錘子‘);

//判斷元素值為三星是否在數組中

echo in_array(‘三星‘, $phone);

2.使用 array_key_exists 函數可以判斷鍵值或索引是否存在這個數組中。

//數組

$computer = array(‘聯想‘=>‘X808‘, ‘華碩‘=>‘Y560‘, ‘微星‘=>‘Z890‘);

//判斷鍵值為聯想的元素是否在數組中

echo array_key_exists(‘聯想‘, $computer);

3.使用 array_search 函數可以搜索元素值的索引值。

//數組

$phone = array(‘蘋果‘, ‘華為‘, ‘三星‘, ‘小米‘, ‘魅族‘, ‘錘子‘);

//返回搜索的鍵

echo array_search(‘三星‘, $phone);


數組轉換操作

1.使用 array_keys 函數可以返回數組中的索引,並組成一個新數組。

//數組

$computer = array(‘聯想‘=>‘X808‘, ‘華碩‘=>‘Y560‘, ‘微星‘=>‘Z890‘);

//提取索引並當作元素組成新數組

$keys = array_keys($computer);

//輸出

var_export($keys);

2.使用 array_values 函數返回所有元素值並重新生成一個數值索引數組。

//數組

$computer = array(‘聯想‘=>‘X808‘, ‘華碩‘=>‘Y560‘, ‘微星‘=>‘Z890‘);

//提取元素值並創建新數組

$values = array_values($computer);

//輸出

var_export($values);


數組拆合操作

1.使用 array_chunk 函數分組數組。

//數組

$phone = array(‘蘋果‘, ‘華為‘, ‘三星‘, ‘小米‘, ‘魅族‘, ‘錘子‘);

//每兩個分一組,組成多維數組

$chunk = array_chunk($phone, 2);

//打印測試

print_r($chunk);

2.使用 array_merge 函數組合數組。

//數組

$phone = array(‘蘋果‘, ‘華為‘, ‘三星‘, ‘小米‘, ‘魅族‘, ‘錘子‘);

//數組 2

$computer = array(‘聯想‘=>‘X808‘, ‘華碩‘=>‘Y560‘, ‘微星‘=>‘Z890‘);

//整合兩個數組

$array = array_merge($phone, $computer);

//打印輸出

print_r($array);

3.使用 array_combine 函數合並數組。

//數組 1

$computer = array(‘聯想‘=>‘X808‘, ‘華碩‘=>‘Y560‘, ‘微星‘=>‘Z890‘);

//數組 2

$phone = array(‘蘋果‘, ‘華為‘, ‘三星‘);

//取數組 1 的值作為鍵,取數組 2 的值作為元素值,然後合並

$array = array_combine($computer, $phone);

//打印輸出

print_r($array);

4.使用 array_intersect 函數返回數組中的交集。

//數組 1

$color1 = array(‘a‘=>‘green‘, ‘red‘, ‘blue‘);

//數組 2

$color2 = array(‘b‘=>‘green‘, ‘yellow‘, ‘red‘);

//返回交集並創建新數組

$array = array_intersect($color1, $color2);

//打印輸出

print_r($array);

5.使用 array_diff 函數返回數組的差集。

//數組 1

$color1 = array(‘a‘=>‘green‘, ‘red‘, ‘blue‘);

//數組 2

$color2 = array(‘b‘=>‘green‘, ‘yellow‘, ‘red‘);

//返回差集,並建立新數組

$array = array_diff($color1, $color2);

//打印

print_r($array);


數組計算操作

1.使用 count/sizeof 函數可以返回數組的元素個數。

//數組

$phone = array(‘蘋果‘, ‘華為‘, ‘三星‘, ‘小米‘, ‘魅族‘, ‘錘子‘);

//得到數組的元素個數

echo count($phone);

//多維數組

$price = array(

array(‘小米 8‘, 100, 2999),

array(‘iphone9 plus‘, 50, 7999),

array(‘錘子 x‘, 10, 3999)

);

//遞歸統計

echo count($price, 1);

2.使用 array_pad 函數填充數組。

//數組

$phone = array(‘蘋果‘, ‘華為‘, ‘三星‘, ‘小米‘, ‘魅族‘, ‘錘子‘);

//向右填充兩位,數組本身 6 位

$array = array_pad($phone, 8, ‘占位‘);

//打印查看

print_r($array);

//負數,可以在左邊填充

$array = array_pad($phone, -8, ‘占位‘);

3.使用 array_fill 函數給定的值填充數組。

//創建索引從 3 開始,4 個值為 banana 的數組

$array = array_fill(3, 4, ‘banana‘);

//輸出

var_export($array);

4.使用 array_sum 函數求出數組所有值的和。

//數值數組

$num = array(1, 2, 3, 4, 5, 6);

//求和

echo array_sum($num);

5.使用 array_product 函數返回數組所有數值的乘積。

//數組

$num = array(1, 2, 3, 4, 5, 6);

//求乘積

echo array_product($num);

6.使用 array_unique 函數移出數組中重復的值。

//數組

$phone = array(‘蘋果‘, ‘華為‘, ‘三星‘, ‘小米‘, ‘魅族‘, ‘錘子‘, ‘蘋果‘);

//移除重復的值

$array = array_unique($phone);

//輸出

var_export($array);

7.使用 array_flip 函數將鍵和值對調。

//數組

$computer = array(‘聯想‘=>‘X808‘, ‘華碩‘=>‘Y560‘, ‘微星‘=>‘Z890‘);

//交換鍵和值

$array = array_flip($computer);

//輸出

var_export($array);

8.使用 array_rand 函數從數組中隨機取出一個或多個元素值。

//數組

$phone = array(‘蘋果‘, ‘華為‘, ‘三星‘, ‘小米‘, ‘魅族‘, ‘錘子‘);

//隨機返回索引

$keys = array_rand($phone);

//輸出

var_export($keys);

//隨機取出兩個

$keys = array_rand($phone, 2);

9.使用 array_count_values 函數統計所有的值出現的次數。

//數組

$phone = array(‘蘋果‘, ‘華為‘, ‘三星‘, ‘三星‘, ‘魅族‘, ‘魅族‘);

//統計

$count = array_count_values($phone);

//輸出

var_export($count);

10.使用 array_column 函數返回數組中指定的一列。

//多維數組

$grade = array(

array(

‘數學‘=>95,

‘語文‘=>92,

‘英語‘=>97

),

array(

‘數學‘=>99,

‘語文‘=>95,

‘英語‘=>92

),

array(

‘數學‘=>92,

‘語文‘=>95,

‘英語‘=>93

),

);

//返回語文一列

$chinese = array_column($grade, ‘語文‘);

//輸出

var_export($chinese);



數組叠代操作

1.使用 each 函數獲取當前數組指針定位的鍵值對,並讓指針向下一個位置移動一步。

//數組

$phone = array(‘蘋果‘, ‘華為‘, ‘三星‘, ‘小米‘, ‘魅族‘, ‘錘子‘);

//獲取第一個位置的鍵值對,並將指針下移

list($key, $value) = each($phone);

//打印第一個位置的鍵值對

echo $key.‘-‘.$value;

//獲取第二個位置的鍵值對,並將指針下移

list($key, $value) = each($phone);

//打印第二個位置的鍵值對

echo $key.‘-‘.$value;

2.使用 current 函數返回當前數組指針指向的元素值。

//數組

$phone = array(‘蘋果‘, ‘華為‘, ‘三星‘, ‘小米‘, ‘魅族‘, ‘錘子‘);

//獲取當前指針的元素值

$one = current($phone);

//獲取當前指針的元素值,註:並不會下移指針

$two = current($phone);

//輸出

echo $one;

//輸出

echo $two;

3.使用 next 函數將數組指針移動至下一位。

//獲取一位元素值

$one = current($phone);

//指針下移一位

next($phone);

//獲取下一位元素值

$two = current($phone);

next

4.使用 prev 函數將指針移動至上一位。

//往上一位移動

prev($phone);

5.使用 reset 函數將指針移至第一位。

//移至第一位

reset($phone)

6.使用 end 函數將指針移至末尾。

//移至末尾

end($phone);

7.使用 key 函數返回當前指針元素的鍵。

//移至末尾

key($phone)


數組排序操作

1.使用 sort 函數對數組進行從低到高排序。(按值排序,並重新分配索引)

//數組

$array = array(‘green‘, ‘red‘, ‘orange‘, ‘blue‘);

//對源數組進行排序

sort($array);

//打印

print_r($array);

$sort_flags 值較多,我們一一解釋一下:

(1).SORT_REGULAR - 正常比較單元(不改變類型,默認值)

1.如果是字符串,會按照首字母從低到高順序排列;

2.如果是數值,會按照數字從小到大排列,如果其中是數值字符串,不影響;

3.如果是中文字符,在 GBK 的情況下,會按照中文字符的拼音排序,如果是

UTF8,則需要進行一些轉換,這裏暫時不深入探討。

(2).SORT_STRING - 單元被作為字符串來比較

//數組

$array = array(2, 12);

//按字符串模式排序

sort($array, SORT_STRING);

//輸出

print_r($array);

(3).SORT_NUMERIC - 單元被作為數字來比較

//數組

$array = array(‘2‘, ‘12‘);

//按數字排序

sort($array, SORT_NUMERIC);

//輸出

print_r($array);

(4).SORT_NATURAL 自然排序,SORT_FLAG_CASE 和自然排序合並,實現不區分

大小寫排序。

//數組

$array = array(‘Apple1‘, ‘apple2‘, ‘Apple3‘, ‘apple4‘);

//不區分大小寫

sort($array, SORT_NATURAL | SORT_FLAG_CASE);

//輸出

print_r($array);

2.使用 rsort 函數對數組進行從高到低排序。(按值排序,並重新分配索引)

//數組

$array = array(‘green‘, ‘red‘, ‘orange‘, ‘blue‘);

//對源數組進行排序

sort($array);

//打印

print_r($array);

3.使用 usort 實現自定義排序。(按值排序,並重新分配索引)

//數組

$array = array(7, 3, 5, 9, 1, 4, 2);

//自定義排序

usort($array, function ($a, $b) {

if ($a == $b) {

return 0;

}

return ($a < $b) ? -1 : 1;

});

//輸出

print_r($array);

4.asort、arsort、uasort 函數對應上面三個函數的功能,只不過不會重新分配索引。

//數組

$array = array(‘green‘, ‘red‘, ‘orange‘, ‘blue‘);

//從低到高排序,但不改變索引

asort($array);

//輸出

print_r($array);

5.ksort、krsort、kasort 函數對應上面三個函數的功能,只不過對鍵進行排序。

//數組

$array = array(‘x‘=>‘green‘, ‘j‘=>‘red‘, ‘b‘=>‘orange‘, ‘h‘=>‘blue‘);

//對鍵進行從低到高排序

ksort($array);

//輸出

print_r($array);

6.使用 shuffle 函數對數組進行隨機排序。

//數組

$array = array(‘green‘, ‘red‘, ‘orange‘, ‘blue‘);

//實現隨機排序

shuffle($array);

//輸出

print_r($array);

7.使用natsort實現自然排序,使用natcasesort函數實現不區分大小寫的自然排序。

//數組

$array = array(‘demo8.php‘, ‘demo1.php‘, ‘demo10.php‘, ‘demo5.php‘);

//自然排序

natsort($array);

//輸出

print_r($array);

8.使用 array_reverse 函數實現翻轉數組並重新生成。

//數組

$array = array(‘green‘, ‘red‘, ‘orange‘, ‘blue‘);

//翻轉數組並返回翻轉的數組

$reverse = array_reverse($array);

//輸出

var_export($reverse);


數組函數補齊

1.使用 compact 函數將變量和值整合成數組。

//變量和值

$name = ‘Mr.Lee‘;

$age = 33;

$job = ‘teacher‘;

//整合成數組

$result = compact(‘name‘, ‘age‘, ‘job‘);

//輸出

var_export($result)

2.使用 extract 函數將數組的鍵值解析變量和值。

//數組

$info = array(‘name‘=>‘Mr.Lee‘, ‘age‘=>33, ‘job‘=>‘teacher‘);

//解析成變量

extract($info);

//輸出變量

echo $name.$age.$job;

3.使用 array_change_key_case 返回字符串鍵名為小寫或大寫的數組。

//數組

$color = array(‘Red‘=>‘apple‘, ‘Orange‘=>‘banana‘);

//轉換鍵名為默認小寫並返回新數組

$array = array_change_key_case($color);

//輸出

var_export($array);

4.使用 array_filter 函數過濾元素值。

//數組

$color = array(‘red‘, ‘blue‘, ‘orange‘, ‘green‘, ‘yellow‘);

//回調函數進行判斷過濾

$array = array_filter($color, function ($value) {

if ($value != ‘green‘) {

return $value;

}

});

//輸出

var_export($array);

5.使用 array_map 函數處理元素值。

//數組

$num = array(1, 2, 3, 4, 5);

//對元素值進行逐個處理

$array = array_map(function ($n) {

return $n * $n * $n;

}, $num);

//輸出

print_r($array);

//多個數組

$num = array(1, 2, 3, 4, 5);

$enlish = array(‘one‘, ‘two‘, ‘three‘, ‘four‘, ‘five‘);

//回調函數為 null,可以合並兩個數組

$array = array_map(null, $num, $enlish);

//輸出

print_r($array);

6.使用 array_reduce 函數叠代的處理元素值簡化為單一值。

//數組

$num = array(1, 2, 3, 4, 5);

//叠代處理

$total = array_reduce($num, function ($v, $w) {

$v += $w;

return $v;

});

//輸出

echo $total;

7.使用 array_replace 函數替換數組元素。

//數組

$color = array(‘red‘, ‘blue‘, ‘orange‘, ‘green‘);

//替換的數組

$replacements = array(0=>‘yellow‘);

//執行替換並生成新數組

$array = array_replace($color, $replacements);

//輸出

var_export($array);

8.使用 array_walk 函數可以通過回調函數自定義數組中每個元素值。

//數組

$color = array(‘red‘, ‘blue‘, ‘orange‘, ‘green‘);

//更改數組中的元素值

array_walk($color, function (&$value) {

if ($value == ‘orange‘) {

$value = ‘yellow‘;

}

});

//數組

print_r($color)


PHP 數組