PHP筆記(三):陣列相關操作方法
本文記錄一些PHP陣列處理的方法。
目錄- 1. 檢查陣列中是否存在某個值
- 2. 檢查陣列或者變數方法
- 3. 過濾陣列元素
- 4. 刪除陣列元素
- 5. 插入陣列元素
- 6. 返回陣列最後一個元素
- 7. 陣列切片
- 8. 判斷兩個陣列是否相等
- 9. 替換陣列元素
- 10. 移除陣列重複元素
- 11. 陣列排序
1. 檢查陣列中是否存在某個值
in_array(mixed $needle
, array $haystack
, bool $strict
= false
): bool
- 檢查陣列中是否存在某個值
- 如果
strict
的值為true
,還會檢查needle
的型別是否和haystack
舉例:
<?php
/* in_array */
$array1 = ['one', 'two', 'three', 'four', 'five'];
if (in_array("one", $array1)) {
echo "Got one";
}
?>
結果:
Got one
2. 檢查陣列或者變數方法
變數檢查:
- isset() - 檢測變數是否已宣告並且其值不為 null,釋放變數使用 unset() 方法。
- defined() - 檢查某個名稱的常量是否存在
-
empty() - 檢查一個變數是否為空,PHP中的“空”元素包括:空字串
""
0
、浮點數0.0
、字串"0"
、null
、false
、空陣列array()
、聲明瞭但沒有值的變數$var
。 - is_null() - 檢測變數是否為 null。
- property_exists() - 檢查物件或類是否具有該屬性。
- method_exists() - 檢查類的方法是否存在。
陣列檢查:
-
array_keys(
$array
) - 返回陣列中所有鍵名。 -
array_keys(
$array
,$search_value
): 返回search_value
值的鍵名。 -
array_key_exists(
$key
,$array
) - 檢查數組裡是否有指定的鍵名或索引。 -
array_search(
$needle
,$haystack
) - 在陣列$haystack
中搜索給定的值$needle
,返回相應的鍵名。
3. 過濾陣列元素
array_filter(array $array
, ?callable $callback
= null
, int $mode
= 0): array
-
array
陣列中的每個值會傳遞給callback
回撥函式,如果callback
回撥函式返回true
,則將array
陣列中的當前值返回到結果 array 陣列中。 - 如果不設定
callback
回撥函式,會刪除陣列array
中的所有“空”元素。 - 過濾後的array 陣列鍵名不會重新索引,可以使用 array_values() 函式對陣列進行重新索引。
-
$mode = 0
- 預設值,接受值作為唯一引數 -
$mode = ARRAY_FILTER_USE_KEY
- 接受鍵名作為唯一引數 -
$mode = ARRAY_FILTER_USE_BOTH
- 同時接受鍵名和鍵值
舉例:
<?php
/* array_filter */
$array1 = [0 => '', 1 => 'one', 2 => 'two', 3 => 'three', 4 => 'four', 5 => 'five'];
$array1 = array_filter($array1);
echo "<pre>";
print_r($array1);
echo "</pre>";
/* array_values */
$array1 = array_values($array1); // 重新索引
echo "<pre>";
print_r($array1);
echo "</pre>";
function odd($var)
{
return $var & 1;
}
function even($var)
{
return !($var & 1);
}
$array1 = ['one' => 1, 'two' => 2, 'three' => 3, 'four' => 4, 'five' => 5];
$array_even = array_filter($array1, "even");
$array_odd = array_filter($array1, "odd");
echo "<pre>";
print_r($array_even);
echo "</pre>";
echo "<pre>";
print_r($array_odd);
echo "</pre>";
$array2 = [1 => 'one', 2 => 'two', 3 => 'three', 4 => 'four', 5 => 'five'];
$array_even = array_filter($array2,function($var){ return(!($var & 1));},ARRAY_FILTER_USE_KEY);
$array_odd = array_filter($array2,function($var){ return($var & 1);},ARRAY_FILTER_USE_KEY);
echo "<pre>";
print_r($array_even);
echo "</pre>";
echo "<pre>";
print_r($array_odd);
echo "</pre>";
?>
結果:
Array
(
[1] => one
[2] => two
[3] => three
[4] => four
[5] => five
)
Array
(
[0] => one
[1] => two
[2] => three
[3] => four
[4] => five
)
Array
(
[two] => 2
[four] => 4
)
Array
(
[one] => 1
[three] => 3
[five] => 5
)
Array
(
[2] => two
[4] => four
)
Array
(
[1] => one
[3] => three
[5] => five
)
4. 刪除陣列元素
① array_pop(array &$array
) - 刪除陣列最後一個元素
舉例:
<?php
/* array_pop */
$array1 = ['one', 'two', 'three', 'four', 'five'];
$last = array_pop($array1);
echo "<pre>";
print_r($array1);
echo "</pre>";
?>
結果:
Array
(
[0] => one
[1] => two
[2] => three
[3] => four
)
② array_shift(array &$array
) - 將陣列開頭的單元移出陣列並作為結果返回
舉例:
<?php
/* array_shift */
$array1 = ['one', 'two', 'three', 'four', 'five'];
$first = array_shift($array1);
echo "<pre>";
print_r($array1);
echo "</pre>";
?>
結果:
Array
(
[0] => two
[1] => three
[2] => four
[3] => five
)
5. 插入陣列元素
① array_unshift(&$array
, ...$values
) - 在陣列開頭插入一個或多個元素
舉例:
<?php
/* array_unshift */
$array1 = ['one', 'two', 'three', 'four', 'five'];
array_unshift($array1, '0', 'zero');
echo "<pre>";
print_r($array1);
echo "</pre>";
?>
結果:
Array
(
[0] => 0
[1] => zero
[2] => one
[3] => two
[4] => three
[5] => four
[6] => five
)
② array_push(&$array
, ...$values
) - 將一個或多個單元壓入陣列的末尾(入棧)
建議直接使用 $array[] =
追加元素。
舉例:
<?php
/* array_push */
$array1 = ['one', 'two', 'three', 'four', 'five'];
array_push($array1, 'six', 'seven');
$array1[] = 'eight';
echo "<pre>";
print_r($array1);
echo "</pre>";
?>
結果:
Array
(
[0] => one
[1] => two
[2] => three
[3] => four
[4] => five
[5] => six
[6] => seven
[7] => eight
)
③ array_merge(...$arrays
) — 合併一個或多個數組
舉例:
<?php
/* array_merge */
$array1 = ['one', 'two', 'three'];
$array2 = ['four', 'five'];
$array3 = array_merge($array1, $array2);
$array1[] = 'eight';
echo "<pre>";
print_r($array3);
echo "</pre>";
?>
結果:
Array
(
[0] => one
[1] => two
[2] => three
[3] => four
[4] => five
)
6. 返回陣列最後一個元素
end(&$array
) - 將 array
的內部指標移動到最後一個單元並返回其值。
array_key_last($array
) - 獲取一個數組的最後一個鍵值
舉例:
<?php
/* end */
$array1 = ['one', 'two', 'three'];
$last = end($array1);
echo "<pre>";
print_r($last);
echo "</pre>";
echo current($array1) . "<br />\n"; // 返回陣列中的當前值
reset($array1); // 將陣列的內部指標指向第一個單元
echo current($array1) . "<br />\n";
next($array1); // 將陣列的內部指標向後移動一位
echo current($array1) . "<br />\n";
prev($array1); // 將陣列的內部指標向前移動一位
echo current($array1) . "<br />\n";
/* array_key_last */
$array1 = ['one', 'two', 'three'];
$last = array_key_last($array1);
echo "<pre>";
print_r($last);
echo "</pre>";
?>
結果:
three
three
one
two
one
2
7. 陣列切片
array_slice( $array
, $offset
, $length
= null
, $preserve_keys
= false
) - 返回根據 offset
和 length
引數所指定的 array
陣列中的一段序列。
舉例:
<?php
/* array_slice */
$array1 = ['one', 'two', 'three', 'four', 'five'];
$output = array_slice($array1, 2);
print_r($output) ;
echo "<br />\n";
$output = array_slice($array1, -3, 2); // 返回 "d"
print_r($output) ;
echo "<br />\n";
$output = array_slice($array1, 0, 3);
print_r($output) ;
echo "<br />\n";
$output = array_slice($array1, 1, -3);
print_r($output) ;
echo "<br />\n";
$output = array_slice($array1, 1, 3);
print_r($output) ;
echo "<br />\n";
$output = array_slice($array1, 1, 3, true);
print_r($output) ;
echo "<br />\n";
?>
結果:
Array ( [0] => three [1] => four [2] => five )
Array ( [0] => three [1] => four )
Array ( [0] => one [1] => two [2] => three )
Array ( [0] => two )
Array ( [0] => two [1] => three [2] => four )
Array ( [1] => two [2] => three [3] => four )
8. 判斷兩個陣列是否相等
array_diff( $array
, ...$arrays
) - 返回在 array
中但是不在其他 array 裡的值。可用於判斷兩個陣列是否相等。
array_diff_key( $array
, ...$arrays
) - 返回在 array
中但是未出現在任何其它陣列中的鍵名的值。
舉例:
<?php
/* array_diff */
$array1 = ['one', 'two', 'three'];
$array2 = ['one', 'two', 'three', 'four', 'five'];
$output1 = array_diff($array1, $array2);
$output2 = array_diff($array2, $array1);
if (empty($output1) and empty($output2)) {
echo "The arrays are equal";
} else {
echo "The arrays are not equal";
}
?>
結果:
The arrays are not equal
9. 替換陣列元素
array_replace( $array
, ...$replacements
) - 使用傳遞的陣列替換第一個陣列的元素
舉例:
<?php
/* array_replace */
$array1 = ['one', 'two', 'three'];
$array2 = ['four', 'five', 'six'];
$output = array_replace($array1, $array2);
echo "<pre>";
print_r($output);
echo "</pre>";
$array1 = ['one', 'two', 'three', '', '', ''];
$array2 = ['', '', '', 'four', 'five', 'six'];
$output = array_replace($array1,array_slice($array2,3,null,$preserve_keys = true));
echo "<pre>";
print_r($output);
echo "</pre>";
?>
結果:
Array
(
[0] => four
[1] => five
[2] => six
)
Array
(
[0] => one
[1] => two
[2] => three
[3] => four
[4] => five
[5] => six
)
10. 移除陣列重複元素
array_unique - 移除陣列中重複的值
舉例:
<?php
/* array_unique */
$array1 = ['one', 'two', 'three', 'four', 'five', 'five'];
$output = array_unique($array1);
echo "<pre>";
print_r($output);
echo "</pre>";
?>
結果:
Array
(
[0] => one
[1] => two
[2] => three
[3] => four
[4] => five
)
11. 陣列排序
常用排序函式如下表:
函式名稱 | 排序依據 | 陣列索引鍵保持 | 排序的順序 |
---|---|---|---|
array_multisort() | 值 | string 鍵保持不變,int 鍵重新索引 | 第一個陣列或者由選項指定 |
asort() | 值 | 是 | 升序 |
arsort() | 值 | 是 | 降序 |
krsort() | 鍵 | 是 | 降序 |
ksort() | 鍵 | 是 | 升序 |
natcasesort() | 值 | 是 | 自然排序,大小寫不敏感 |
natsort() | 值 | 是 | 自然排序 |
rsort() | 值 | 否 | 降序 |
shuffle() | 值 | 否 | 隨機 |
sort() | 值 | 否 | 升序 |
uasort() | 值 | 是 | 由使用者定義 |
uksort() | 鍵 | 是 | 由使用者定義 |
usort() | 值 | 否 | 由使用者定義 |
舉例:
<?php
/* asort */
$array1 = ['two' => 2, 'one' => 1, 'four' => 4, 'three' => 3, 'five' => 5];
asort($array1);
echo "<pre>";
print_r($array1);
echo "</pre>";
/* ksort */
$array1 = [1 => 'one', 3 => 'three', 2 => 'two', 5 => 'five', 4 => 'four'];
ksort($array1);
echo "<pre>";
print_r($array1);
echo "</pre>";
?>
結果:
Array
(
[one] => 1
[two] => 2
[three] => 3
[four] => 4
[five] => 5
)
Array
(
[1] => one
[2] => two
[3] => three
[4] => four
[5] => five
)
參考資料:
凡事都應當儘可能地簡單,而不是較為簡單。 ——愛因斯坦