mapreduce() 공개 정적인 메소드

$mapFn has signature ($item, $mapEmit) where $item is item from data and $mapEmit is emit function $reduceFn has signature ($key, $items, $reduceEmit) where $key is the key the data are grouped by, $items is the group and $reduce emit is an emit function $mapEmit has signature ($key, $value) where $key is the key the data are grouped by and $value is a transformed item $reduceEmit has signature ($obj) where $obj is the transformed group
public static mapreduce ( $data, $mapFn, $reduceFn ) : array
$data
$mapFn
$reduceFn
리턴 array
예제 #1
0
 private function groupBulkActions($changeInfoList)
 {
     $bulkChangeInfoClasses = $this->bulkChangeInfoClasses;
     $groupedChangeInfos = ArrayUtils::mapreduce($changeInfoList, function (TrackedChangeInfo $item, $mapEmit) {
         $key = "{$item->getEntityName()}/{$item->getAction()}";
         $mapEmit($key, $item);
     }, function ($key, $items, $reduceEmit) use($bulkChangeInfoClasses) {
         /** @var TrackedChangeInfo[] $items */
         if (count($items) > 1) {
             $entityName = $items[0]->getEntityName();
             if (isset($bulkChangeInfoClasses[$entityName])) {
                 $reduceEmit(new $bulkChangeInfoClasses[$entityName]($items));
             } else {
                 $reduceEmit($items);
             }
         } else {
             $reduceEmit($items[0]);
         }
     });
     $changeInfos = array();
     foreach ($groupedChangeInfos as $changeInfoGroup) {
         if (is_array($changeInfoGroup)) {
             foreach ($changeInfoGroup as $changeInfo) {
                 $changeInfos[] = $changeInfo;
             }
         } else {
             $changeInfos[] = $changeInfoGroup;
         }
     }
     return $changeInfos;
 }
 private function groupBulkActions($changeInfoList)
 {
     $groupedChangeInfos = ArrayUtils::mapreduce($changeInfoList, function (ChangeInfo $item, $mapEmit) {
         if ($item instanceof TrackedChangeInfo) {
             $key = "{$item->getScope()}/{$item->getAction()}";
             $mapEmit($key, $item);
         } else {
             $mapEmit(spl_object_hash($item), $item);
         }
     }, function ($key, $items, $reduceEmit) {
         /** @var TrackedChangeInfo[] $items */
         if (count($items) > 1) {
             $reduceEmit(new BulkChangeInfo($items));
         } else {
             $reduceEmit($items[0]);
         }
     });
     $changeInfos = [];
     foreach ($groupedChangeInfos as $changeInfoGroup) {
         if (is_array($changeInfoGroup)) {
             foreach ($changeInfoGroup as $changeInfo) {
                 $changeInfos[] = $changeInfo;
             }
         } else {
             $changeInfos[] = $changeInfoGroup;
         }
     }
     return $changeInfos;
 }