1. 程式人生 > 其它 >PHP筆記(三):陣列相關操作方法

PHP筆記(三):陣列相關操作方法

本文記錄一些PHP陣列處理的方法。

目錄

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"nullfalse、空陣列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
) - 返回根據 offsetlength 引數所指定的 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
)

參考資料:

  1. 陣列排序:https://www.php.net/manual/zh/array.sorting.php
  2. https://www.php.net/manual/zh/book.array.php
--THE END--

凡事都應當儘可能地簡單,而不是較為簡單。 ——愛因斯坦