目錄
array_map :對每個元素做統一處理
array_filter :留下符合規則的元素
array_reduce :把數組濃縮成一個結果
首頁 後端開發 php教程 描述php中的' array_map”,' array_filter”和`array_reduce”之間的差異。

描述php中的' array_map”,' array_filter”和`array_reduce”之間的差異。

Jul 08, 2025 am 01:08 AM

array_map、array_filter 和array_reduce 的區別在於:1.array_map 對每個元素做統一處理,返回新數組;2.array_filter 篩選符合條件的元素,保留原值或修改鍵值;3.array_reduce 將數組濃縮成一個結果。具體來說,array_map 適用於對數組中所有元素進行變換,如平方操作生成新數組;array_filter 用於篩選出滿足條件的元素,支持默認過濾假值和自定義回調判斷;array_reduce 則通過累積方式將數組壓縮為單一值,如求和或拼接字符串,初始值可自定義或默認使用第一個元素。三者用途明確,分別對應修改、篩选和聚合操作。

Describe the differences between `array_map`, `array_filter`, and `array_reduce` in php.

在PHP 中, array_maparray_filterarray_reduce是三個常用的數組處理函數,它們都可以配合回調函數來操作數組,但各自用途不同。簡單來說:

Describe the differences between `array_map`, `array_filter`, and `array_reduce` in php.
  • array_map :對數組中的每個元素做處理,返回新數組。
  • array_filter :篩選符合條件的元素,保留原值或修改鍵值。
  • array_reduce :把數組“縮成”一個值,比如求和、拼接等。

下面分別來看它們的實際用法和區別。


array_map :對每個元素做統一處理

這個函數適用於你想對數組裡的每一個元素都進行某種變換的情況。它會遍歷數組,把每個元素傳給回調函數,然後收集返回值組成一個新的數組。

Describe the differences between `array_map`, `array_filter`, and `array_reduce` in php.

常見用法示例:

 $numbers = [1, 2, 3, 4];
$squared = array_map(fn($n) => $n * $n, $numbers);
// 結果:[1, 4, 9, 16]
  • 回調函數必須有返回值,否則該位置會變成null
  • 可以傳多個數組,回調參數一一對應(例如兩個數組相加)。
  • 原數組的鍵會被保留,除非你傳了多個數組且鍵不一致,這時會按索引合併。

array_filter :留下符合規則的元素

當你想從數組裡挑出某些符合條件的元素時,就用這個函數。它不會改變元素的值(除非你在回調中主動改),只是決定留不留下來。

Describe the differences between `array_map`, `array_filter`, and `array_reduce` in php.

兩種使用方式:

  • 只傳一個參數:自動過濾掉“假值”(如0 , false , null , '' )。
  • 帶回調函數:自己定義判斷邏輯。
 $numbers = [0, 1, 2, false, '', null, 3];

$result = array_filter($numbers);
// 結果:[1 => 1, 2 => 2, 6 => 3],只留下“真值”

$even = array_filter($numbers, fn($n) => is_int($n) && $n % 2 === 0);
// 篩選出是整數且為偶數的值

注意:

  • 如果你要保留原始的鍵名,記得用ARRAY_FILTER_USE_BOTH標誌。
  • 回調函數返回true就保留, false就排除。

array_reduce :把數組濃縮成一個結果

這是最靈活但也最容易理解錯的一個。它不是用來生成新數組,而是通過不斷“累積”結果,把整個數組壓縮成一個值,比如總和、字符串拼接、複雜計算等。

 $numbers = [1, 2, 3, 4];
$sum = array_reduce($numbers, fn($carry, $item) => $carry $item, 0);
// 結果:10

關鍵點:

  • $carry是上一次的結果,第一次是初始值(第三個參數)。
  • $item是當前處理的元素。
  • 初始值可選,如果不傳,默認第一個元素作為初始值,從第二個開始處理。

舉個稍微複雜的例子:

 $words = ['apple', 'banana', 'cherry'];
$result = array_reduce($words, fn($str, $word) => $str . '-' . $word);
// 結果:'apple-banana-cherry'

基本上就這些。這三個函數雖然都能配合回調使用,但職責分明: map改每個元素, filter挑出一部分, reduce把全部變成一個結果。用的時候根據目的選擇,可以寫出更清晰、簡潔的代碼。

以上是描述php中的' array_map”,' array_filter”和`array_reduce”之間的差異。的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Stock Market GPT

Stock Market GPT

人工智慧支援投資研究,做出更明智的決策

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

如何檢查電子郵件地址在PHP中是否有效? 如何檢查電子郵件地址在PHP中是否有效? Sep 21, 2025 am 04:07 AM

usefilter_var()

如何在PHP中製作對象的深度副本或克隆? 如何在PHP中製作對象的深度副本或克隆? Sep 21, 2025 am 12:30 AM

useunSerialize(serialize($ obj))fordeepcopyingwhenalldataiSerializable;否則,exhiment__clone()tomanallyDuplicateNestedObjectedObjectSandAvoidSharedReference。

如何合併PHP中的兩個陣列? 如何合併PHP中的兩個陣列? Sep 21, 2025 am 12:26 AM

usearray_merge()tocombinearrays,oftritingDupritingDuplicateStringKeySandReIndexingNumericKeys; forsimplerconcatenation,尤其是innphp5.6,usethesplatoperator [... $ array1,... $ array2]。

如何在PHP項目中使用名稱空間? 如何在PHP項目中使用名稱空間? Sep 21, 2025 am 01:28 AM

NamespacesinPHPorganizecodeandpreventnamingconflictsbygroupingclasses,interfaces,functions,andconstantsunderaspecificname.2.Defineanamespaceusingthenamespacekeywordatthetopofafile,followedbythenamespacename,suchasApp\Controllers.3.Usetheusekeywordtoi

PHP中的魔術方法是什麼,並提供了'__call()和`__get()'的示例。 PHP中的魔術方法是什麼,並提供了'__call()和`__get()'的示例。 Sep 20, 2025 am 12:50 AM

__call()methodistred prightedwhenaninAccessibleOrundEfinedMethodiscalledonAnaBject,允許customhandlingByAcceptingTheMethodNameAndarguments,AsshoheNpallingNengallingUndEfineDmethodSlikesayHello()

如何使用PHP更新數據庫中的記錄? 如何使用PHP更新數據庫中的記錄? Sep 21, 2025 am 04:47 AM

toupdateadatabaseRecordInphp,firstConnectusingpDoormySqli,thenusepreparedStatementStoExecuteAsecuteAsecuresqurupDatequery.example.example:$ pdo = newpdo(“ mySql:mysql:host = localHost; localhost; localhost; dbname; dbname = your_database = your_database',yous_database',$ username,$ username,$ squeaste;

MySQL條件聚合:使用CASE語句實現字段的條件求和與計數 MySQL條件聚合:使用CASE語句實現字段的條件求和與計數 Sep 16, 2025 pm 02:39 PM

本文深入探討了在MySQL中如何利用CASE語句進行條件聚合,以實現對特定字段的條件求和及計數。通過一個實際的預訂系統案例,演示瞭如何根據記錄狀態(如“已結束”、“已取消”)動態計算總時長和事件數量,從而克服傳統SUM函數無法滿足複雜條件聚合需求的局限性。教程詳細解析了CASE語句在SUM函數中的應用,並強調了COALESCE在處理LEFT JOIN可能產生的NULL值時的重要性。

如何在PHP中獲取文件擴展名? 如何在PHP中獲取文件擴展名? Sep 20, 2025 am 05:11 AM

usepathinfo($ fileName,pathinfo_extension)togetThefileextension; itreliablyhandlesmandlesmultipledotsAndEdgecases,返回theextension(例如,“ pdf”)oranemptystringifnoneexists。

See all articles