Skip to content

mapSpread

迭代集合的项目,将每个嵌套的项目值传递到给定的闭包中。 闭包可以自由修改并返回它,从而形成一个新的修改后的集合。

php
collect([1, 2, 3, 4, 5, 6, 7, 8])
  ->chunk(2) // 将集合拆成多个指定大小的小集合
  ->mapSpread(fn ($a, $b) => [$a => $b]);

// [[1 => 2], [3 => 4], [5 => 6], [7 => 8]]

值得注意的是,一定要保证对应的值有数据,否则将跟产生预期不符合的错误。

php
collect([1, 2, 3, 4, 5, 6, 7])
  ->chunk(3)
  ->mapSpread(function ($a, $b, $c) {
    return $a * $b - $c;
  });

// output
/**
 * TypeError: Too few arguments to function {closure}(), 2 passed in ../xx/../vendor/laravel/framework/src/Illuminate./Traits/EnumeratesValues.php
 * on line 316 and exactly 3 expected
 */

改变原集合

php
$collection = collect([1, 2, 3, 4, 5, 6, 7, 8, 9])->chunk(3);
// [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

$newCollection = $collection->mapSpread(fn ($a, $b, $c) => $a * $b - $c); // [-1, 14, 47]

$collection; // [[1, 2, 3, 0], [4, 5, 6, 1], [7, 8, 9, 2]]