亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
2。高階功能:地圖,過濾,減少
array_map轉(zhuǎn)換
array_filter過濾
array_reduce聚集
3。鏈接操作(功能管道)
4。避免副作用并使用封閉
概括
首頁 后端開發(fā) php教程 具有PHP的關(guān)聯(lián)陣列的功能編程范例

具有PHP的關(guān)聯(lián)陣列的功能編程范例

Aug 03, 2025 pm 04:18 PM
PHP Associative Arrays

通過返回新陣列而不是修改原件來使用不變的陣列; 2。應(yīng)用諸如array_map,array_filter和array_reduce之類的高階功能以進(jìn)行清潔轉(zhuǎn)換; 3。使用嵌套呼叫或收集類創(chuàng)建功能管道的鏈操作; 4。用閉合寫純粹的功能,以避免副作用并增強(qiáng)可重復(fù)性;總體而言,PHP通過對這些技術(shù)的紀(jì)律使用來支持與關(guān)聯(lián)陣列的功能編程,從而提高了代碼的清晰度和可維護(hù)性。

具有php \的關(guān)聯(lián)陣列的功能編程范例

PHP通常被視為一種程序或面向?qū)ο蟮恼Z言,但它也可以支持功能編程(FP)范式,尤其是在使用關(guān)聯(lián)陣列時。雖然PHP并未從頭開始設(shè)計用于Haskell或Clojure之類的功能編程,但它提供了足夠的工具(封閉,高階功能,不可變形模式),以有效地應(yīng)用關(guān)鍵FP概念。

具有PHP的關(guān)聯(lián)陣列的功能編程范例

您可以使用PHP的關(guān)聯(lián)陣列使用功能編程技術(shù)。


1。不變性和純粹的功能

在功能編程中,不應(yīng)突變數(shù)據(jù)。與其修改一個關(guān)聯(lián)數(shù)組,不如返回一個新數(shù)組。

具有PHP的關(guān)聯(lián)陣列的功能編程范例

壞(突變):

 $ user = ['name'=>'alice','age'=> 30];
$ user ['active'] = true; //突變原始

更好(不變性):

具有PHP的關(guān)聯(lián)陣列的功能編程范例
功能帶有activestatus(array $ user):array {
    返回['Active'=> true] $ user; //新陣列,原始陣列不變
}

$ user = ['name'=>'alice','age'=> 30];
$ updateDuser = withactivestatus($ user);

使用 操作員將陣列從右到左合并,并保留原件。這種模式鼓勵純粹的功能 - 不會引起副作用并始終返回相同輸入的相同輸出的功能。


2。高階功能:地圖,過濾,減少

PHP提供的內(nèi)置功能與fp: array_maparray_filterarray_reduce很好地對齊。與關(guān)聯(lián)陣列一起使用時,它們有助于整潔地轉(zhuǎn)換,選擇和匯總數(shù)據(jù)。

array_map轉(zhuǎn)換

$ users = [
    ['名稱'=>'愛麗絲','age'=> 30],
    ['name'=>'鮑勃','age'=> 25]
];

$ names = array_map(fn($ user)=> $ user ['name'],$用戶);
//結(jié)果:['Alice','Bob']

注意: array_map保留鍵,該密鑰在使用索引或鍵入的關(guān)聯(lián)數(shù)據(jù)時很有用。

array_filter過濾

$ unders = array_filter($ user,fn($ user)=> $ user ['age']> = 30);
//僅返回年齡> = 30的用戶

您還可以保留鍵(默認(rèn)值),或者以后使用array_values() reidindex(如果需要)。

array_reduce聚集

$ totalage = array_reduce($用戶,fn($ crand,$ user)=> $ crand $ user ['age'],0);
//結(jié)果:55

這些功能避免循環(huán)并使意圖更清晰 - EAK表示特定的轉(zhuǎn)換。


3。鏈接操作(功能管道)

您可以通過嵌套或使用流利的樣式鏈操作。雖然PHP沒有內(nèi)置的方法鏈條,但您可以將數(shù)組包裝在簡單的類中或使用嵌套功能調(diào)用。

示例:嵌套呼叫

$ averageadultage = array_reduce(
    array_filter($用戶,fn($ u)=> $ u ['age']> = 30),
    fn($ crand,$ u)=> $ crand $ u ['age'],
    0
) / count(array_filter($用戶,fn($ u)=> $ u ['age']> = 30));

另外,請使用助手來鏈接:

班級集合{
    私人陣列$項目;

    公共功能__construct(array $ items){
        $ this->項目= $項目;
    }

    公共功能圖(可呼叫$ fn):self {
        返回新自我(array_map($ fn,$ this-> items));
    }

    公共功能過濾器(可呼叫$ fn):self {
        返回新自我(array_filter($ this-> items,$ fn));
    }

    公共功能降低(可呼叫$ fn,$啟動){
        返回array_reduce($ this->項目,$ fn,$ nitial);
    }

    公共功能toarray():array {
        返回$ this->項目;
    }
}

// 用法
$ avg =(new Collection($用戶))
     - > filter(fn($ u)=> $ u ['age']> = 30)
     - > map(fn($ u)=> $ u ['age'])
     - >降低(fn($ sum,$ age)=> $ sum $ age,0);

$平均= $ avg / count(array_filter($用戶,fn($ u)=> $ u ['age']> = 30));

這種模仿JavaScript或Elixir中可見的功能管道。


4。避免副作用并使用封閉

PHP(匿名功能)中的關(guān)閉對于FP至關(guān)重要。他們可以捕獲上下文,并且是一流的值。

函數(shù)createGreeter(字符串$ entring){
    返回fn($ name)=>“ $問候,$ name!”;
}

$ sayhello = createGreeter(“ hello”);
$ etchusers = array_map($ sayhello,$ names);

這避免了全球狀態(tài),并促進(jìn)可重復(fù)使用的,可復(fù)合的邏輯。

另外,避免修改外部變量的功能:

 $ counter = 0;
array_map(function($ item)use(&$ counter){$ counter;},$ array); //不純凈!

相反,計算功能計數(shù):

 $ count = array_reduce($ array,fn($ c,$ i)=> $ c 1,0);

概括

您可以在PHP中應(yīng)用功能編程原理,并通過:

  • 將陣列視為不變的
  • 使用array_map , array_filterarray_reduce進(jìn)行轉(zhuǎn)換
  • 通過構(gòu)圖或包裝班來構(gòu)建管道
  • 編寫純粹的功能并避免副作用
  • 利用封閉性和封裝

盡管PHP缺乏一些FP功能(例如模式匹配或懶惰評估),但這些模式提高了代碼清晰度,可檢驗性和可維護(hù)性。

基本上,您不需要純粹的功能性語言即可在功能上寫入 - 只是學(xué)科和正確的抽象。

以上是具有PHP的關(guān)聯(lián)陣列的功能編程范例的詳細(xì)內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
具有PHP的關(guān)聯(lián)陣列的功能編程范例 具有PHP的關(guān)聯(lián)陣列的功能編程范例 Aug 03, 2025 pm 04:18 PM

Useimmutablearraysbyreturningnewarraysinsteadofmodifyingoriginals;2.Applyhigher-orderfunctionslikearray_map,array_filter,andarray_reduceforcleantransformations;3.ChainoperationsusingnestedcallsoraCollectionclasstocreatefunctionalpipelines;4.Writepure

優(yōu)化大型關(guān)聯(lián)陣列的內(nèi)存足跡 優(yōu)化大型關(guān)聯(lián)陣列的內(nèi)存足跡 Aug 03, 2025 pm 03:30 PM

Toreducememoryusageinlargeassociativearrays,firstchooseacompactdatastructurelikeflat_hash_maporperfecthashingforstaticdata,thenoptimizekeyandvaluerepresentationsbyusingsmallertypes,interningstrings,andavoidingpointers,followedbytuningtheloadfactorand

有效的JSON序列化策略用于多維關(guān)聯(lián)陣列 有效的JSON序列化策略用于多維關(guān)聯(lián)陣列 Aug 03, 2025 am 11:50 AM

NormalizethedatastructurebeforeserializationtoensureconsistencyandavoidambiguityinJSONoutput.2.Handlenon-serializabledatatypesbyrecursivelyfilteringorcastingvaluestoscalarsandusingJsonSerializableforcustomobjects.3.UseJSONconstantslikeJSON_PRETTY_PRI

分析PHP關(guān)聯(lián)陣列中關(guān)鍵操作的時間復(fù)雜性 分析PHP關(guān)聯(lián)陣列中關(guān)鍵操作的時間復(fù)雜性 Aug 04, 2025 am 08:29 AM

phassociativearraysareAryPlementedAsordedHashtables,啟用效率keykey-valueoperations; 1. insertion:平均(1),wortocollisision(n)duetocollisision; 2. lookup; 2. lookup:平均(1),worso; 3.deption; 3.deleto; 3.deleto; 3.deleto:peravero;平均(1),workekey(nivision)

具有PHP關(guān)聯(lián)陣列的建筑遞歸樹結(jié)構(gòu) 具有PHP關(guān)聯(lián)陣列的建筑遞歸樹結(jié)構(gòu) Aug 04, 2025 pm 12:52 PM

要將扁平數(shù)據(jù)構(gòu)建成遞歸樹結(jié)構(gòu),需使用關(guān)聯(lián)數(shù)組高效映射節(jié)點;1.遍歷數(shù)據(jù)創(chuàng)建以ID為鍵的關(guān)聯(lián)數(shù)組,每個節(jié)點初始化空children;2.再次遍歷,通過parent_id將當(dāng)前節(jié)點引用加入父節(jié)點的children數(shù)組中,根節(jié)點放入tree數(shù)組;3.最終得到嵌套樹結(jié)構(gòu),該方法時間復(fù)雜度接近O(n),優(yōu)于遞歸方案,適用于分類、評論等層級場景。

超越``foreach'':使用迭代器和`array_walk''的掌握迭代 超越``foreach'':使用迭代器和`array_walk''的掌握迭代 Aug 05, 2025 am 08:07 AM

使用迭代器(如實現(xiàn)Iterator接口的類)可高效處理大數(shù)據(jù)集,避免內(nèi)存浪費;2.array_walk適用于直接修改原數(shù)組的場景,支持通過引用操作元素和訪問鍵;3.與array_map不同,array_walk不生成新數(shù)組,適合就地轉(zhuǎn)換;4.可結(jié)合迭代器與回調(diào)函數(shù)構(gòu)建可復(fù)用、可組合的數(shù)據(jù)處理邏輯;5.foreach仍適用于簡單循環(huán),但在復(fù)雜場景下應(yīng)選用迭代器或array_walk以提升效率和代碼質(zhì)量。掌握這些技術(shù)能實現(xiàn)更高效、靈活的PHP數(shù)據(jù)遍歷與轉(zhuǎn)換。

關(guān)聯(lián)陣列與對象:PHP中性能和類型安全性指南 關(guān)聯(lián)陣列與對象:PHP中性能和類型安全性指南 Aug 04, 2025 am 09:59 AM

使用lesserMemoryAndEnablingQuickerRead/WriteAnditration,MakeThemideAlforperformance-Criticaltance-CriticaltaskslikeProcessingLargedAtasetSorsorHandaPiresponses.2.Objects.2.Objects.2.Objects,尤其是typedpedpedpedclassesinphp8

使用PHP關(guān)聯(lián)陣列實施集合和字典數(shù)據(jù)結(jié)構(gòu) 使用PHP關(guān)聯(lián)陣列實施集合和字典數(shù)據(jù)結(jié)構(gòu) Aug 06, 2025 am 01:02 AM

phpassiativearrayscanbeusedtoimpletementseteTAndDictionAryDattructures.1.foraset,usearrayKeykeyStostoStoreNiquelements,enaplingo(1)平均timecomplexityforadd,emove and emove and lookeupoperationsviaissetviaisset(and lookeuperationsviaisset()和foradectionary,andunset()

See all articles