在数组中的每个对象上调用函数的最佳方法?没有for循环?

Best way to call function on every object in array? Without for loop?

我很好奇是否有更好的方法来完成我正在做的事情。我是 php 的新手,所以我很想知道其他花更多时间使用该语言的人的看法。

我想做什么: 对数组中的每个对象调用一个函数

我在做什么:

array_map(function($object) { $object->loadEvents(); }, $patients);

这很好,而且有效。我也可以使用 for 循环 ,

我为什么要问: 我已经习惯了在没有循环的时候不使用 for 循环,所以我想出了一个方法来使用 array_map。问题是,无论我在哪里看,似乎人们都在使用 array_map 将结果映射到新数组。当我基本上想要 array_map 的功能但没有 return 值时。

有没有更好的方法?在此之外还有一个for循环? for循环是更好的方法吗?

使用循环有什么问题?这正是它设计的确切目的。

foreach ($patients as $patient) {
    $patient->loadEvents();
}

每个人都简单明了。编写冗长的代码来完成同样的工作有什么意义,只是因为看起来 "cool" 或者每个人都在做什么?

I've become accustomed to not using for loops when I don't have to, so I figured out a way to use array_map.

您因为自己设定的不使用循环的任意规则而错误地使用了 array_map()

PHP 中用于遍历数组的常用习惯用法是 foreach 运算符。 array_walkarray_map 可以使用,但它们并没有成为常见的习语,因为直到 PHP 的相对较新版本之前,创建匿名函数并不方便。在 PHP 5.3 之前,您必须调用 create_function() 才能动态创建函数。所以 array_walkarray_map 通常只在有一个命名函数可以做你想做的事情时使用,例如

$array = array_map('trim', $array);

但即使现在您可以使用 function 创建匿名函数,许多人仍然发现

array_walk($array, function($x) {
    ...
});

可读性低于

foreach ($array as $xx) {
    ...
}

array_maparray_walk 更常用,因为它可以用作更大表达式的一部分。使用 foreach 时,您将不得不使用一个循环来推入结果数组,然后在其后跟代码以对该数组进行操作。