阅读了这篇SO post 后,在 PHP 中,我知道您可以通过以下方式index进行迭代array_map:
array_map(function($item, $index) { ... }, $items, array_keys($items));
Run Code Online (Sandbox Code Playgroud)
使用时如何获得$index可用的资源array_reduce?我试过了:
array_reduce($items, array_keys($items), function($acc, $item, $index) { ... }, array());
array_reduce($items, function($acc, $item, $index) { ... }, array(), array_keys($items));
Run Code Online (Sandbox Code Playgroud)
但我似乎仍不能得到$index在array_reduce。有没有人成功地做到过这一点?
编辑
这里有一些关于我为什么问这个问题的背景。
我不想使用,foreach因为我必须改变外部的数组foreach才能创建我的集合。我宁愿避免突变。
其他语言允许人们reduce像在JavaScript和Ruby 中一样使用和访问当前索引。我希望在 PHP 中获得相同的功能。那好吧!看起来我将不得不使用 aforeach来创建我的数组,同时还要在迭代下使用当前索引。
小智 6
我只是有同样的问题。解决起来非常简单。
$i = 0;
$p = array_reduce($array, function($output, $item) use (&$i) {
// use $i
// do something with $item and/or $output
$i++; // increment $i
return $output;
}, $initial);
Run Code Online (Sandbox Code Playgroud)
&$i$i作为参考传递并授予它将被更新。
您所知道的获取索引的信息array_reduce并不存在。检查文档。
问题是为什么?
看,reduce 的目的是得到一个单一的值,它是聚合。您有初始值和下一个值,显示您的减少策略。知道当前项目索引是没有意义的。
在其他一些语言中,它们可能会提供当前索引,但在 PHP 中则不然array_reduce。它的语言和功能是设计好的,在实现上有一些限制。
但这并不意味着你不能拥有它。你可以拥有它,但不能通过回调!
$i = 0;
$data = [1, 2, 3, 4];
// (1)
$result = array_reduce($data, function ($c, $i) { return $c + $i; }, 0);
// (2)
array_reduce($data, function ($c, $i) { echo "$i\n"; $i++; return $c + $i; }, 0);
Run Code Online (Sandbox Code Playgroud)
问题是,这个函数就是为了做到这一点而设计的。或者您尝试使用错误的函数。其他一些功能可能正是您正在寻找的。
或者你也可以编写一个函数来完成它:)
| 归档时间: |
|
| 查看次数: |
2788 次 |
| 最近记录: |