使用array_map
,如果使用实现了ArrayAccess
的容器来派生对象,这只是一种更聪明、更语义化的方式,对吧?
就我看到过的大多数语言和实现而言,array_map
的语义相似。它被设计为基于输入数组元素返回修改后的数组(高级别忽略语言编译/运行时类型偏好);循环则用于执行更多逻辑。
为了通过ID/PK检索对象,取决于您是否使用SQL(似乎建议是这样),我会使用过滤器来确保获得有效PK的数组,然后与逗号 implode 并放入SQL的IN()
子句中返回结果集。它只需要一个SQL调用,优化了部分call->wait
周期。最重要的是,我的代码可以让任何具有一定能力的人都能够轻松理解,并且我们不会遇到可变性问题。
<?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);
如果您知道自己在做什么,就不会有可变性问题(请记住,如果您打算覆盖$arr
,您始终可以使用$arr = array_map
并明确说明)。