3 回答

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超7個(gè)贊
當(dāng)然使用array_map(如果使用實(shí)現(xiàn)容器的容器ArrayAccess來(lái)派生對(duì)象)僅僅是一種更聰明的語(yǔ)義方法嗎?
我所看到的大多數(shù)語(yǔ)言和實(shí)現(xiàn)中的數(shù)組映射語(yǔ)義都相似。它旨在根據(jù)輸入數(shù)組元素返回修改后的數(shù)組(高級(jí)忽略語(yǔ)言編譯/運(yùn)行時(shí)類(lèi)型首選項(xiàng));循環(huán)意味著執(zhí)行更多的邏輯。
為了通過(guò)ID / PK檢索對(duì)象,具體取決于您是否使用SQL(似乎建議使用),我將使用過(guò)濾器來(lái)確保獲得有效PK的數(shù)組,然后使用逗號(hào)爆破并放入SQL IN()子句中以返回結(jié)果集。它通過(guò)SQL進(jìn)行一次調(diào)用而不是多次調(diào)用,從而優(yōu)化了整個(gè)call->wait周期。最重要的是,我的代碼對(duì)于具有某種能力的任何語(yǔ)言的人都可以很好地理解,并且我們不會(huì)遇到可變性問(wèn)題。
<?php
$arr = [0,1,2,3,4];
$arr2 = array_map(function($value) { return is_int($value) ? $value*2 : $value; }, $arr);
var_dump($arr);
var_dump($arr2);
與
<?php
$arr = [0,1,2,3,4];
foreach($arr as $i => $item) {
$arr[$i] = is_int($item) ? $item * 2 : $item;
}
var_dump($arr);
如果您知道自己在做什么,就永遠(yuǎn)不會(huì)有變異性問(wèn)題(如果打算改寫(xiě),請(qǐng)牢記,您$arr始終$arr = array_map可以做到明確。

TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個(gè)贊
foreach
確實(shí)不建議使用in引用foreach
,因?yàn)檠h(huán)值部分的傳遞會(huì)導(dǎo)致不可預(yù)測(cè)的行為。它可能會(huì)更長(zhǎng),但是使用此處的方法1會(huì)更加安全。
- 3 回答
- 0 關(guān)注
- 407 瀏覽
添加回答
舉報(bào)