【问题标题】:Best way to call function on every object in array? Without for loop?在数组中的每个对象上调用函数的最佳方法?没有for循环?
【发布时间】:2016-08-10 17:04:28
【问题描述】:

我很好奇是否有更好的方法来做我正在做的事情。我对 php 还很陌生,所以我对其他人对这门语言花费更多时间的看法很感兴趣。

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

我在做什么:

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

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

我问的原因:我已经习惯了在没有的情况下不使用 for 循环,所以我想出了一个使用 array_map 的方法.问题是,我看到的每一个地方,似乎人们都在使用 array_map 将结果映射到一个新数组。当我基本上想要 array_map 的功能但没有返回值时。

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

【问题讨论】:

  • 你为什么这么害怕 for 循环?最后array_map() 还将使用内部循环来遍历数组值。你也可以看看array_walk()
  • foreach 是通常的方式。
  • 正如@Rizier123 建议的那样,array_walk() 是不构建新数组的array_map() 版本。
  • 如果你只是因为它看起来很时髦而尝试使用它,你会过得很糟糕。只需使用最好的工具来完成这项工作。如果循环是最简单、最干净的解决方案,请使用它。

标签: php arrays object array-map


【解决方案1】:

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,您必须使用一个循环来推入一个结果数组,然后在其后面加上代码以对该数组进行操作。

【讨论】:

  • 这实际上对我不起作用,因为我正在使用函数 loadEvents 更改实例。显然引用和array_walk存在问题,在这种情况下,这么多的for循环是最简单的。不过,我感谢您的帮助。
  • 我认为对象和array_walk 不应该有任何问题。我的回答中有 array_walk 的论据,也许这就是问题所在?
  • 哦,是的,这就是问题所在!非常感谢,完美运行!
【解决方案2】:

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

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

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

我已经习惯了在不需要的时候不使用 for 循环,所以我想出了一个使用 array_map 的方法。

您错误地使用了array_map(),因为您自己设置了一条不使用循环的任意规则?

【讨论】:

  • 这似乎更像是一个评论。我同意,但您基本上忽略了这个问题,并忽略了array_walk 的明显答案。
  • 我没有使用任何东西。没有人说一旦 for 循环出现问题,就没有。问这个问题是为了获得知识。
  • @nerdlyist 好吧,我根本没有忽略这个问题。它从字面上开始 “我很好奇是否有更好的方法来做我正在做的事情。” 我的回答是肯定的,使用 foreach 循环而不是 array_map 不是适合目的,array_walk 在这种情况下基本上是一种与简单的foreach 循环相同的方式。 foreach 显然更具可读性,并且可以准确地完成所需的工作,而编程就是要为问题找到最佳、高效和整洁的解决方案。
  • @KristoferDoman 您在问题中确实问过 “for 循环是更好的方法吗?” 还说 “我已经习惯不使用 for 循环了当我没有的时候,所以我想出了一种使用 array_map 的方法,如果你想编写好的代码,从编程的角度来看这是没有意义的。
  • @BadHorsie 我个人觉得 foreach 的可读性较差,所以那里没有什么清楚的。你只是在争论争论,我已经完成了。
猜你喜欢
  • 2021-04-02
  • 1970-01-01
  • 2021-06-23
  • 2018-06-15
  • 2019-04-12
  • 2018-03-01
  • 2017-02-19
  • 2021-09-21
  • 1970-01-01
相关资源
最近更新 更多