CakePHP
  • 文档
    • 手册
    • API
    • 视频
    • 报告安全问题
    • 隐私政策
    • 标识和商标
  • 商业解决方案
  • 周边商品
  • 公路旅行
  • 团队
  • 社区
    • 社区
    • 参与进来
    • 问题(GitHub)
    • 烘焙坊
    • 特色资源
    • 培训
    • 聚会
    • 我的 CakePHP
    • CakeFest
    • 新闻通讯
    • 领英
    • YouTube
    • Facebook
    • 推特
    • Mastodon
    • 帮助和支持
    • 论坛
    • Stack Overflow
    • IRC
    • Slack
    • 付费支持
CakePHP

C CakePHP 5.1 Chiffon API

  • 项目
    • CakePHP
      • CakePHP
      • Chronos
      • Elastic Search
      • 队列
  • 版本
    • 5.1
      • 5.1
      • 5.0
      • 4.5
      • 4.4
      • 4.3
      • 4.2
      • 4.1
      • 4.0
      • 3.10
      • 3.9
      • 3.8
      • 3.7
      • 3.6
      • 3.5
      • 3.4
      • 3.3
      • 3.2
      • 3.1
      • 3.0
      • 2.10
      • 2.9
      • 2.8
      • 2.7
      • 2.6
      • 2.5
      • 2.4
      • 2.3
      • 2.2
      • 2.1
      • 2.0
      • 1.3
      • 1.2

命名空间

  • 全局
  • Cake
    • 缓存
    • 集合
      • 迭代器
    • 命令
    • 控制台
    • 控制器
    • 核心
    • 数据库
    • 数据源
    • 错误
    • 事件
    • 表单
    • Http
    • 国际化
    • 日志
    • 邮件
    • 网络
    • ORM
    • 路由
    • 测试套件
    • 实用工具
    • 验证
    • 视图

类 MapReduce

实现一个流行的 Map-Reduce 算法的简化版本。在每个结果被处理后,它就像原始数据的迭代器,从而为来自任何来源的结果提供一个透明的包装器。

命名空间: Cake\Collection\Iterator

属性摘要

  • $_counter protected
    int

    在 Reduce 阶段发出的元素计数

  • $_data protected
    iterable

    保存需要处理的原始数据

  • $_executed protected
    bool

    Map-Reduce 程序是否已在数据上执行

  • $_intermediate protected
    array

    保存从映射阶段发出的随机结果

  • $_mapper protected
    callable

    一个可调用函数,它将对原始数据中的每个记录执行

  • $_reducer protected
    callable|null

    一个可调用函数,它将在映射阶段发出的每个中间记录上执行

  • $_result protected
    array

    保存 Reduce 阶段发出的结果

方法摘要

  • __construct() public

    构造函数

  • _execute() protected

    运行实际的 Map-Reduce 算法。这将迭代原始数据并为每个数据调用映射器函数,然后为映射阶段创建的每个中间桶调用 Reduce 函数。

  • emit() public

    将新记录附加到最终结果列表,并可选地为该记录分配一个键。

  • emitIntermediate() public

    将新记录附加到标记为 $key 的桶,通常是映射原始数据中的单个记录的结果。

  • getIterator() public

    返回一个迭代器,其中包含对原始数据运行 Map 和 Reduce 阶段的最终结果

方法详情

__construct() ¶ public

__construct(iterable $data, callable $mapper, callable|null $reducer = null)

构造函数

示例

将数组中的所有唯一奇数和偶数分开

 $data = new \ArrayObject([1, 2, 3, 4, 5, 3]);
 $mapper = function ($value, $key, $mr) {
     $type = ($value % 2 === 0) ? 'even' : 'odd';
     $mr->emitIntermediate($value, $type);
 };

$reducer = function ($numbers, $type, $mr) {
     $mr->emit(array_unique($numbers), $type);
 };
 $results = new MapReduce($data, $mapper, $reducer);

前面的示例将生成以下结果

 ['odd' => [1, 3, 5], 'even' => [2, 4]]
参数
iterable $data

要处理的原始数据。

callable $mapper

映射器回调。此函数将接收 3 个参数。第一个是当前值,第二个是当前结果键,第三个是该类实例,因此您可以调用结果发射器。

callable|null $reducer optional

减速器回调。此函数将接收 3 个参数。第一个是桶内的值列表,第二个是映射阶段创建的桶的名称,第三个是该类的实例。

_execute() ¶ protected

_execute(): void

运行实际的 Map-Reduce 算法。这将迭代原始数据并为每个数据调用映射器函数,然后为映射阶段创建的每个中间桶调用 Reduce 函数。

返回
void
抛出
LogicException
如果调用了 emitIntermediate 但没有提供减速器函数

emit() ¶ public

emit(mixed $val, mixed $key = null): void

将新记录附加到最终结果列表,并可选地为该记录分配一个键。

参数
mixed $val

要附加到最终结果列表的值

mixed $key optional

要分配给值的可选键

返回
void

emitIntermediate() ¶ public

emitIntermediate(mixed $val, mixed $bucket, mixed $key = null): void

将新记录附加到标记为 $key 的桶,通常是映射原始数据中的单个记录的结果。

参数
mixed $val

要存储在桶中的记录本身

mixed $bucket

放置记录的桶的名称

mixed $key optional

要分配给值的可选键

返回
void

getIterator() ¶ public

getIterator(): Traversable

返回一个迭代器,其中包含对原始数据运行 Map 和 Reduce 阶段的最终结果

返回
Traversable

属性详情

$_counter ¶ protected

在 Reduce 阶段发出的元素计数

类型
int

$_data ¶ protected

保存需要处理的原始数据

类型
iterable

$_executed ¶ protected

Map-Reduce 程序是否已在数据上执行

类型
bool

$_intermediate ¶ protected

保存从映射阶段发出的随机结果

类型
array

$_mapper ¶ protected

一个可调用函数,它将对原始数据中的每个记录执行

类型
callable

$_reducer ¶ protected

一个可调用函数,它将在映射阶段发出的每个中间记录上执行

类型
callable|null

$_result ¶ protected

保存 Reduce 阶段发出的结果

类型
array
OpenHub
Pingping
Linode
  • 商业解决方案
  • 展示
  • 文档
  • 手册
  • API
  • 视频
  • 报告安全问题
  • 隐私政策
  • 标识和商标
  • 社区
  • 参与进来
  • 问题(GitHub)
  • 烘焙坊
  • 特色资源
  • 培训
  • 聚会
  • 我的 CakePHP
  • CakeFest
  • 新闻通讯
  • 领英
  • YouTube
  • Facebook
  • 推特
  • Mastodon
  • 帮助和支持
  • 论坛
  • Stack Overflow
  • IRC
  • Slack
  • 付费支持

使用 CakePHP API Docs 生成