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

时间:2016-08-10 17:04:29

标签: php arrays object array-map

我很好奇是否有更好的方法去做我正在做的事情。我对php很新,所以我对其他人认为谁花更多时间学习语言感兴趣。

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

我在做什么:

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

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

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

有更好的方法吗?在这之外和for循环? for循环是一种更好的方法吗?

2 个答案:

答案 0 :(得分:3)

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_map的使用范围往往超过array_walk,因为它可以用作更大表达式的一部分。使用foreach,您必须使用一个循环来推送到结果数组,然后使用代码对其进行操作。

答案 1 :(得分:0)

使用循环有什么问题?这就是它的目的所在。

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

每个人都很简单明了。编写冗长的代码来实现相同的工作有什么意义,因为它看起来很酷"很酷"或者每个人都在做什么?

  

我不习惯不使用for循环,所以我想出了一种使用array_map的方法。

你是否因为你已经设定自己没有使用循环的规则而错误地使用array_map()