lodash-php/lodash-php

将 Lodash 转换为 PHP 的库

0.09 2024-02-01 07:59 UTC

This package is auto-updated.

Last update: 2024-09-18 12:04:00 UTC


README

Lodash-PHP 是 Lodash JS 库的 PHP 版本。它是一套易于使用的工具函数,适用于日常 PHP 项目。

Lodash-PHP 尽可能地模仿 lodash.js

要求

Lodash-PHP 需要 PHP 7.2+,但建议使用 PHP 的最新版本。

安装

通过 composer 安装 Lodash-PHP

$ composer require lodash-php/lodash-php

用法

Lodash-PHP 中的每个方法都是一个独立的函数,可以单独导入和使用。

<?php

use function _\each;

each([1, 2, 3], function (int $item) {
    var_dump($item);
});

Lodash-PHP 还提供了一个全局的 _ 类,可以在全局范围内使用。

<?php

_::each([1, 2, 3], function (int $item) {
    var_dump($item);
});

方法

数组

chunk

创建一个元素被分割成大小为 size 的组的数组。如果 array 不能均匀分割,最后的组将是剩余的元素。

参数

@param array $array 数组 要处理的数组。

@param int $number [size=1] 每个块的大小

返回

@return array 返回新数组,包含块。

示例

<?php
 use function _\chunk;

chunk(['a', 'b', 'c', 'd'], 2)
// => [['a', 'b'], ['c', 'd']]

chunk(['a', 'b', 'c', 'd'], 3)
// => [['a', 'b', 'c'], ['d']]

compact

创建一个数组,移除了所有假值。值 falsenull0""undefinedNaN 被认为是假值。

参数

@param array $array 要压缩的数组。

返回

@return array 返回过滤后的新数组。

示例

<?php
 use function _\compact;

compact([0, 1, false, 2, '', 3])
// => [1, 2, 3]

concat

创建一个新数组,通过连接 array 和任何额外的数组或值。

参数

@param array $array 要连接的数组。

@param array<int, mixed> $values 要连接的值。

返回

@return array 返回新连接的数组。

示例

<?php
 use function _\concat;

$array = [1];
$other = concat($array, 2, [3], [[4]]);

var_dump($other)
// => [1, 2, 3, [4]]

var_dump($array)
// => [1]

difference

创建一个数组,包含 array 中不在其他给定数组中的值,使用 SameValueZero 进行相等比较。结果值的位置和引用由第一个数组确定。

注意:pullAll 不同,此方法返回一个新数组。

参数

@param array $array 要检查的数组。

@param array ...$values 要排除的值。

返回

@return array 返回过滤后的新数组。

示例

<?php
 use function _\difference;

difference([2, 1], [2, 3])
// => [1]

differenceBy

此方法类似于 difference,但接受 iteratee,它对 arrayvalues 的每个元素进行调用,以生成比较的标准。结果值的位置和引用由第一个数组确定。iteratee 对一个参数进行调用:(值)。

注意:pullAllBy 不同,此方法返回一个新数组。

参数

@param array $array 要检查的数组。

@param array<int, mixed> ...$values 要排除的值。

@param callable $iteratee 每个元素调用的迭代器。

返回

@return array 返回过滤后的新数组。

示例

<?php
 use function _\differenceBy;

differenceBy([2.1, 1.2], [2.3, 3.4], 'floor')
// => [1.2]

differenceWith

此方法类似于 difference,但接受 comparator,它用于比较 array 的元素与 values。结果值的位置和引用由第一个数组确定。comparator 对两个参数进行调用:(arrVal,othVal)。

注意:pullAllWith 不同,此方法返回一个新数组。

参数

@param array<int, mixed> $array 要检查的数组。

@param array ...$values 要排除的值。

@param callable $comparator 每个元素调用的比较器。

返回

@return array 返回过滤后的新数组。

示例

<?php
 use function _\differenceWith;

$objects = [[ 'x' => 1, 'y' => 2 ], [ 'x' => 2, 'y' => 1 ]]

differenceWith($objects, [[ 'x' => 1, 'y' => 2 ]], '_::isEqual')
// => [[ 'x' => 2, 'y' => 1 ]]

drop

创建一个从 array 开始删除 n 个元素的切片。

注意:此函数将重新排列并重置数组索引

参数

@param array $array 要查询的数组。

@param int $n 要删除的元素数量。

返回

@return array 返回 array 的切片。

示例

<?php
 use function _\drop;

drop([1, 2, 3])
// => [2, 3]

drop([1, 2, 3], 2)
// => [3]

drop([1, 2, 3], 5)
// => []

drop([1, 2, 3], 0)
// => [1, 2, 3]

dropRight

创建一个从末尾删除 n 个元素的 array 切片。 注意:此函数将重新排列并重置数组索引

参数

@param array $array 要查询的数组。

@param int $n 要删除的元素数量。

返回

@return array 返回 array 的切片。

示例

<?php
 use function _\dropRight;

dropRight([1, 2, 3])
// => [1, 2]

dropRight([1, 2, 3], 2)
// => [1]

dropRight([1, 2, 3], 5)
// => []

dropRight([1, 2, 3], 0)
// => [1, 2, 3]

dropRightWhile

创建一个从末尾删除元素(直到 predicate 返回 falsy)的 array 切片。谓词使用三个参数调用:(value, index, array)。

参数

@param array $array 要查询的数组。

@param callable $predicate 每次迭代调用的函数。

返回

@return array 返回 array 的切片。

示例

<?php
 use function _\dropRightWhile;

$users = [
[ 'user' => 'barney',  'active' => false ],
[ 'user' => 'fred',    'active' => true ],
[ 'user' => 'pebbles', 'active' => true ]
]

dropRightWhile($users, function($user) { return $user['active']; })
// => objects for ['barney']

dropWhile

创建一个从开头删除元素(直到 predicate 返回 falsy)的 array 切片。谓词使用三个参数调用:(value, index, array)。

参数

@param array $array 要查询的数组。

@param callable $predicate 每次迭代调用的函数。

返回

@return array 返回 array 的切片。

示例

<?php
 use function _\dropWhile;

$users = [
[ 'user' => 'barney',  'active' => true ],
[ 'user' => 'fred',    'active' => true ],
[ 'user' => 'pebbles', 'active' => false ]
]

dropWhile($users, function($user) { return $user['active']; } )
// => objects for ['pebbles']

every

检查 predicate 是否为 array 的所有元素返回 truthy。一旦 predicate 返回 falsy,迭代就会停止。谓词使用三个参数调用:(value, index, array)。

注意:此方法对于 空数组 返回 true,因为 空数组的元素满足一切条件

参数

@param iterable $collection 要迭代的数组。

@param callable $predicate 每次迭代调用的函数。

返回

@return bool 如果所有元素通过谓词检查,则返回 true,否则返回 false

示例

<?php
 use function _\every;

every([true, 1, null, 'yes'], function ($value) { return is_bool($value);})
// => false

$users = [
['user' => 'barney', 'age' => 36, 'active' => false],
['user' => 'fred', 'age' => 40, 'active' => false],
];

// The `matches` iteratee shorthand.
$this->assertFalse(every($users, ['user' => 'barney', 'active' => false]));
// false

// The `matchesProperty` iteratee shorthand.
$this->assertTrue(every($users, ['active', false]));
// true

// The `property` iteratee shorthand.
$this->assertFalse(every($users, 'active'));
//false

findIndex

此方法类似于 find,但它返回第一个使谓词返回 truthy 的元素的索引,而不是该元素本身。

参数

@param array $array 要检查的数组。

@param callable $predicate 每次迭代调用的函数。

@param int $fromIndex 搜索的起始索引。

返回

@return int 返回找到的元素的索引,否则返回 -1

示例

<?php
 use function _\findIndex;

$users = [
['user' => 'barney',  'active' => false],
['user' => 'fred',    'active' => false],
['user' => 'pebbles', 'active' => true],
];

findIndex($users, function($o) { return $o['user'] s== 'barney'; });
// => 0

// The `matches` iteratee shorthand.
findIndex($users, ['user' => 'fred', 'active' => false]);
// => 1

// The `matchesProperty` iteratee shorthand.
findIndex($users, ['active', false]);
// => 0

// The `property` iteratee shorthand.
findIndex($users, 'active');
// => 2

findLastIndex

此方法类似于 findIndex,但它从 collection 的右侧开始迭代元素。

参数

@param array $array 要检查的数组。

@param mixed $predicate 每次迭代调用的函数。

@param int $fromIndex 搜索的起始索引。

返回

@return int 返回找到的元素的索引,否则返回 -1

示例

<?php
 use function _\findLastIndex;

$users = [
['user' => 'barney',  'active' => true ],
['user' => 'fred',    'active' => false ],
['user' => 'pebbles', 'active' => false ]
]

findLastIndex($users, function($user) { return $user['user'] === 'pebbles'; })
// => 2

flatten

array 展平一维。

参数

@param array $array 要展平的数组。

返回

@return array 返回新的展平数组。

示例

<?php
 use function _\flatten;

flatten([1, [2, [3, [4]], 5]])
// => [1, 2, [3, [4]], 5]

flattenDeep

递归展平 array

参数

@param array $array 要展平的数组。

返回

@return array 返回新的展平数组。

示例

<?php
 use function _\flattenDeep;

flattenDeep([1, [2, [3, [4]], 5]]);
// => [1, 2, 3, 4, 5]

flattenDepth

递归展平 array 最多 depth 次。

参数

@param array $array 要展平的数组。

@param int $depth 最大递归深度。

返回

@return array 返回新的展平数组。

示例

<?php
 use function _\flattenDepth;

$array = [1, [2, [3, [4]], 5]]

flattenDepth($array, 1)
// => [1, 2, [3, [4]], 5]

flattenDepth($array, 2)
// => [1, 2, 3, [4], 5]

fromPairs

toPairs 的逆操作,此方法返回一个由键值对 pairs 组成的对象。

参数

@param array $pairs 键值对。

返回

@return \stdClass 返回新的对象。

示例

<?php
 use function _\fromPairs;

fromPairs([['a', 1], ['b', 2]])
// => stdClass(
// 'a' => 1,
//'b' => 2,
// )

head

获取 array 的第一个元素。

参数

@param array $array 要查询的数组。

返回

@return mixed 返回 array 的第一个元素。

示例

<?php
 use function _\head;

head([1, 2, 3])
// => 1

head([])
// => null

indexOf

使用 SameValueZero 对比相等性,在 array 中找到 value 的第一次出现的索引。如果 fromIndex 为负数,则它用作从 array 末尾的偏移量。

参数

@param array $array 要检查的数组。

@param mixed $value 要搜索的值。

@param int $fromIndex 搜索的起始索引。

返回

@return int 返回匹配值的索引,否则返回 -1

示例

<?php
 use function _\indexOf;

indexOf([1, 2, 1, 2], 2)
// => 1

// Search from the `fromIndex`.
indexOf([1, 2, 1, 2], 2, 2)
// => 3

initial

获取 array 的所有但最后一个元素。

参数

@param array $array 要查询的数组。

返回

@return array 返回 array 的切片。

示例

<?php
 use function _\initial;

initial([1, 2, 3])
// => [1, 2]

intersection

使用 SameValueZero 对比相等性,创建一个包含所有给定数组中唯一值的数组。结果值的顺序和引用由第一个数组确定。

参数

@param array ...$arrays

返回

@return array 返回新的交集值数组。

示例

<?php
 use function _\intersection;

intersection([2, 1], [2, 3])
// => [2]

intersectionBy

该方法类似于 intersection,但它接受一个 iteratee,该迭代器会对每个 arrays 中的每个元素调用,以生成比较的准则。结果值的顺序和引用由第一个数组确定。迭代器用一个参数调用:(value)。

参数

@param array<int, mixed> ...$arrays

@param callable $iteratee 每个元素调用的迭代器。

返回

@return array 返回新的交集值数组。

示例

<?php
 use function _\intersectionBy;

intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor)
// => [2.1]

// The `property` iteratee shorthand.
intersectionBy([[ 'x' => 1 ]], [[ 'x' => 2 ], [ 'x' => 1 ]], 'x');
// => [[ 'x' => 1 ]]

intersectionWith

该方法类似于 intersection,但它接受一个 comparator,该比较器用于比较 arrays 中的元素。结果值的顺序和引用由第一个数组确定。比较器用两个参数调用:(arrVal, othVal)。

参数

@param array ...$arrays

@param callable $comparator 每个元素调用的比较器。

返回

@return array 返回新的交集值数组。

示例

<?php
 use function _\intersectionWith;

$objects = [[ 'x' => 1, 'y' => 2 ], [ 'x' => 2, 'y' => 1 ]]
$others = [[ 'x' => 1, 'y' => 1 ], [ 'x' => 1, 'y' => 2 ]]

intersectionWith($objects, $others, '_::isEqual')
// => [[ 'x' => 1, 'y' => 2 ]]

last

获取 array 的最后一个元素。

参数

@param array $array 要查询的数组。

返回

@return mixed 返回 array 的最后一个元素。

示例

<?php
 use function _\last;

last([1, 2, 3])
// => 3

lastIndexOf

该方法类似于 indexOf,但它从右向左遍历 array 的元素。

参数

@param array $array 要检查的数组。

@param mixed $value 要搜索的值。

@param int $fromIndex 搜索的起始索引。

返回

@return int 返回匹配值的索引,否则返回 -1

示例

<?php
 use function _\lastIndexOf;

lastIndexOf([1, 2, 1, 2], 2)
// => 3

// Search from the `fromIndex`.
lastIndexOf([1, 2, 1, 2], 2, 2)
// => 1

nth

获取 array 中索引为 n 的元素。如果 n 是负数,则返回从末尾起的第 n 个元素。

参数

@param array $array 要查询的数组。

@param int $n 要返回的元素的索引。

返回

@return mixed 返回 array 中的第 n 个元素。

示例

<?php
 use function _\nth;

$array = ['a', 'b', 'c', 'd']

nth($array, 1)
// => 'b'

nth($array, -2)
// => 'c'

pull

使用 SameValueZero 对等性比较从 array 中移除所有给定值。

注意:without 不同,此方法会修改 array。使用 remove 通过谓词从数组中移除元素。

参数

@param array $array 要修改的数组。

@param array<int, string> $values 要移除的值。

返回

@return array

示例

<?php
 use function _\pull;

$array = ['a', 'b', 'c', 'a', 'b', 'c']

pull($array, 'a', 'c')
var_dump($array)
// => ['b', 'b']

pullAll

该方法类似于 pull,但它接受一个要移除的值的数组。

注意:difference 不同,此方法会修改 array

参数

@param array $array 要修改的数组。

@param array $values 要移除的值。

返回

@return array array

示例

<?php
 use function _\pullAll;

$array = ['a', 'b', 'c', 'a', 'b', 'c']

pullAll($array, ['a', 'c'])
var_dump($array)
// => ['b', 'b']

pullAllBy

该方法类似于 pullAll,但它接受一个 iteratee,该迭代器会对 arrayvalues 中的每个元素调用,以生成比较的准则。迭代器用一个参数调用:(value)。

注意:differenceBy 不同,此方法会修改 array

参数

@param array $array 要修改的数组。

@param array $values 要移除的值。

@param callable $iteratee 每个元素调用的迭代器。

返回

@return array array

示例

<?php
 use function _\pullAllBy;

$array = [[ 'x' => 1 ], [ 'x' => 2 ], [ 'x' => 3 ], [ 'x' => 1 ]]

pullAllBy($array, [[ 'x' => 1 ], [ 'x' => 3 ]], 'x')
var_dump($array)
// => [[ 'x' => 2 ]]

pullAllWith

该方法类似于 pullAll,但它接受一个 comparator,该比较器用于比较 array 中的元素与 values。比较器用两个参数调用:(arrVal, othVal)。

注意:differenceWith 不同,此方法会修改 array

参数

@param array $array 要修改的数组。

@param array $values 要移除的值。

@param callable $comparator 每个元素调用的比较器。

返回

@return array array

示例

<?php
 use function _\pullAllWith;

$array = [[ 'x' => 1, 'y' => 2 ], [ 'x' => 3, 'y' => 4 ], [ 'x' => 5, 'y' => 6 ]]

pullAllWith($array, [[ 'x' => 3, 'y' => 4 ]], '_\isEqual')
var_dump($array)
// => [[ 'x' => 1, 'y' => 2 ], [ 'x' => 5, 'y' => 6 ]]

pullAt

从与 indexes 对应的 array 中移除元素,并返回移除的元素数组。

注意:at 不同,此方法会修改 array

参数

@param array $array 要修改的数组。

@param (int | int[]) $indexes 要移除的元素的索引。

返回

@return array 新的移除元素数组。

示例

<?php
 use function _\pullAt;

$array = ['a', 'b', 'c', 'd']
$pulled = pullAt($array, [1, 3])

var_dump($array)
// => ['a', 'c']

var_dump($pulled)
// => ['b', 'd']

remove

array 中移除所有使 predicate 返回真值的元素,并返回移除的元素数组。谓词用三个参数调用:(value, index, array)。

注意:filter 不同,此方法会修改 array。使用 pull 通过值从数组中提取元素。

参数

@param array $array 要修改的数组。

@param callable $predicate 每次迭代调用的函数。

返回

@return array 新的移除元素数组。

示例

<?php
 use function _\remove;

$array = [1, 2, 3, 4]
$evens = remove($array, function ($n) { return $n % 2 === 0; })

var_dump($array)
// => [1, 3]

var_dump($evens)
// => [2, 4]

sample

array 中获取一个随机元素。

参数

@param array $array 要采样的数组。

返回

@return mixed 返回随机元素。

示例

<?php
 use function _\sample;

sample([1, 2, 3, 4])
// => 2

sampleSize

array 中获取 n 个随机元素,这些元素的键是唯一的,大小不超过 array 的大小。

参数

@param array $array 要采样的数组。

@param int $n 要采样的元素数量。

返回

@return array 随机元素。

示例

<?php
 use function _\sampleSize;

sampleSize([1, 2, 3], 2)
// => [3, 1]

sampleSize([1, 2, 3], 4)
// => [2, 3, 1]

shuffle

创建一个打乱顺序的值数组

参数

@param array $array 要打乱的数组。

返回

@return array 新的打乱顺序的数组。

示例

<?php
 use function _\shuffle;

shuffle([1, 2, 3, 4])
// => [4, 1, 3, 2]

slice

startend(不包括 end)创建 array 的一个切片。

参数

@param array $array 要切片的数组。

@param int $start 起始位置。

@param int $end 结束位置。

返回

@return array 返回 array 的切片。

tail

获取array中除了第一个元素之外的所有元素。

参数

@param array $array 要查询的数组。

返回

@return array 返回 array 的切片。

示例

<?php
 use function _\tail;

tail([1, 2, 3])
// => [2, 3]

take

array的开头创建一个包含n个元素的切片。

参数

@param array $array 要查询的数组。

@param int $n 要取的元素数量。

返回

@return array 返回 array 的切片。

示例

<?php
 use function _\take;

take([1, 2, 3])
// => [1]

take([1, 2, 3], 2)
// => [1, 2]

take([1, 2, 3], 5)
// => [1, 2, 3]

take([1, 2, 3], 0)
// => []

takeRight

array的末尾创建一个包含n个元素的切片。

参数

@param array $array 要查询的数组。

@param int $n 要取的元素数量。

返回

@return array 返回 array 的切片。

示例

<?php
 use function _\takeRight;

takeRight([1, 2, 3])
// => [3]

takeRight([1, 2, 3], 2)
// => [2, 3]

takeRight([1, 2, 3], 5)
// => [1, 2, 3]

takeRight([1, 2, 3], 0)
// => []

takeRightWhile

array的末尾创建一个切片,直到predicate返回falsey为止。断言以三个参数调用:(value, index, array)。

参数

@param array $array 要查询的数组。

@param callable $predicate 每次迭代调用的函数。

返回

@return array 返回 array 的切片。

示例

<?php
 use function _\takeRightWhile;

$users = [
[ 'user' => 'barney',  'active' => false ],
[ 'user' => 'fred',    'active' => true ],
[ 'user' => 'pebbles', 'active' => true ]
];

takeRightWhile($users, function($value) { return $value['active']; })
// => objects for ['fred', 'pebbles']

takeWhile

array的开头创建一个切片,直到predicate返回falsey为止。断言以三个参数调用:(value, index, array)。

参数

@param array $array 要查询的数组。

@param mixed $predicate 每次迭代调用的函数。

返回

@return array 返回 array 的切片。

示例

<?php
 use function _\takeWhile;

$users = [
[ 'user' => 'barney',  'active' => true ],
[ 'user' => 'fred',    'active' => true ],
[ 'user' => 'pebbles', 'active' => false ]
]

takeWhile($users, function($value) { return $value['active']; })
// => objects for ['barney', 'fred']

union

使用SameValueZero来比较相等性,从所有给定的数组中创建一个唯一值数组,以顺序。

参数

@param array ...$arrays 要检查的数组。

返回

@return array 新的合并值数组。

示例

<?php
 use function _\union;

union([2], [1, 2])
// => [2, 1]

unionBy

此方法类似于union,除了它接受一个iteratee,该iteratee为每个arrays中的元素调用,以生成计算唯一性的标准。结果值从第一个包含该值的数组中选择。迭代器以一个参数调用:(value)。

参数

@param array<int, mixed> ...$arrays 要检查的数组。

@param callable $iteratee 每个元素调用的迭代器。

返回

@return array 新的合并值数组。

示例

<?php
 use function _\unionBy;

unionBy([2.1], [1.2, 2.3], 'floor')
// => [2.1, 1.2]

// The `_::property` iteratee shorthand.
unionBy([['x' => 1]], [['x' => 2], ['x' => 1]], 'x');
// => [['x' => 1], ['x' => 2]]

unionWith

此方法类似于union,除了它接受一个comparator来比较arrays中的元素。结果值从第一个包含该值的数组中选择。比较器以两个参数调用:(arrVal, othVal)。

参数

@param array<int, mixed> ...$arrays 要检查的数组。

@param callable $comparator 每个元素调用的比较器。

返回

@return array 新的合并值数组。

示例

<?php
 use function _\unionWith;

$objects = [['x' => 1, 'y' => 2], ['x' => 2, 'y' => 1]]
$others = [['x' => 1, 'y' => 1], ['x' => 1, 'y' => 2]]

unionWith($objects, $others, '_::isEqual')
// => [['x' => 1, 'y' => 2], ['x' => 2, 'y' => 1], ['x' => 1, 'y' => 1]]

uniq

创建一个数组,使用SameValueZero来比较相等性,其中只保留每个元素的第一个出现。结果值的顺序由它们在数组中出现的顺序决定。

参数

@param array $array 要检查的数组。

返回

@return array 新的没有重复的数组。

示例

<?php
 use function _\uniq;

uniq([2, 1, 2])
// => [2, 1]s

uniqBy

此方法类似于uniq,除了它接受一个iteratee,该iterateearray中的每个元素调用,以生成计算唯一性的标准。结果值的顺序由它们在数组中出现的顺序决定。迭代器以一个参数调用:(value)。

参数

@param array $array 要检查的数组。

@param mixed $iteratee 每个元素调用的迭代器。

返回

@return array 新的没有重复的数组。

示例

<?php
 use function _\uniqBy;

uniqBy([2.1, 1.2, 2.3], 'floor')
// => [2.1, 1.2]

uniqWith

此方法类似于uniq,除了它接受一个comparator来比较array中的元素。结果值的顺序由它们在数组中出现的顺序决定。比较器以两个参数调用:(arrVal, othVal)。

参数

@param array $array 要检查的数组。

@param callable $comparator 每个元素调用的比较器。

返回

@return array 新的没有重复的数组。

示例

<?php
 use function _\uniqWith;

$objects = [['x' => 1, 'y' => 2], ['x' => 2, 'y' => 1], ['x' => 1, 'y' => 2]]

uniqWith($objects, '_::isEqual')
// => [['x' => 1, 'y' => 2], ['x' => 2, 'y' => 1]]

unzip

此方法类似于zip,除了它接受一个分组元素的数组,并创建一个将元素重新分组到它们之前的配置的数组。

参数

@param array $array 要处理的分组元素数组。

返回

@return array 重新分组元素的新数组。

示例

<?php
 use function _\unzip;

$zipped = zip(['a', 'b'], [1, 2], [true, false])
// => [['a', 1, true], ['b', 2, false]]

unzip($zipped)
// => [['a', 'b'], [1, 2], [true, false]]

unzipWith

此方法类似于unzip,除了它接受一个iteratee来指定如何组合重新分组值。迭代器以每个组的元素调用:(...group)。

参数

@param array $array 要处理的分组元素数组。

@param (callable | null) $iteratee 结合重新分组值的函数。

返回

@return array 重新分组元素的新数组。

示例

<?php
 use function _\unzipWith;

$zipped = zip([1, 2], [10, 20], [100, 200])
// => [[1, 10, 100], [2, 20, 200]]

unzipWith(zipped, '_::add')
// => [3, 30, 300]

without

使用SameValueZero来比较相等性,创建一个排除所有给定值的数组。

注意:pull不同,此方法返回一个新的数组。

参数

@param array $array 要检查的数组。

@param array<int, mixed> $values 要排除的值。

返回

@return array 过滤后的新值数组。

示例

<?php
 use function _\without;

without([2, 1, 2, 3], 1, 2)
// => [3]

zip

创建一个分组元素的数组,其中第一个元素包含给定数组的第一个元素,第二个元素包含给定数组的第二个元素,依此类推。

参数

@param array ...$arrays 要处理的数组。

返回

@return array 新的分组元素数组。

示例

<?php
 use function _\zip;

zip(['a', 'b'], [1, 2], [true, false])
// => [['a', 1, true], ['b', 2, false]]

zipObject

此方法类似于 fromPairs,但接受两个数组,一个包含属性标识符,另一个包含相应的值。

参数

@param array $props 属性标识符。

@param array $values 属性值。

返回

@return object 新的对象。

示例

<?php
 use function _\zipObject;

zipObject(['a', 'b'], [1, 2])
/* => object(stdClass)#210 (2) {
["a"] => int(1)
["b"] => int(2)
}
*\/

zipObjectDeep

此方法类似于 zipObject,但支持属性路径。

参数

@param array $props 属性标识符。

@param array $values 属性值。

返回

@return \stdClass 返回新的对象。

示例

<?php
 use function _\zipObjectDeep;

zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2])
/* => class stdClass#20 (1) {
public $a => class stdClass#19 (1) {
public $b =>
array(2) {
[0] => class stdClass#17 (1) {
public $c => int(1)
}
[1] => class stdClass#18 (1) {
public $d => int(2)
}
}
}
}
*\/

zipWith

此方法类似于 zip,但接受 iteratee 来指定如何组合分组值。迭代器将使用每个组的元素调用:(...group)。

参数

@param array<int, (array | callable)> ...$arrays 要处理的数组。

@param callable $iteratee 组合分组值的函数。

返回

@return array 新的分组元素数组。

示例

<?php
 use function _\zipWith;

zipWith([1, 2], [10, 20], [100, 200], function($a, $b, $c) { return $a + $b + $c; })
// => [111, 222]

集合

countBy

创建一个数组,该数组由通过 iterateecollection 的每个元素运行生成的键组成。每个键的对应值是键通过 iteratee 返回的次数。迭代器使用一个参数调用:(value)。

参数

@param iterable $collection 要迭代的集合。

@param callable $iteratee 转换键的迭代器。

返回

@return array 返回组成的聚合对象。

示例

<?php
 use function _\countBy;

countBy([6.1, 4.2, 6.3], 'floor');
// => ['6' => 2, '4' => 1]

// The `property` iteratee shorthand.
countBy(['one', 'two', 'three'], 'strlen');
// => ['3' => 2, '5' => 1]

each

遍历 collection 的元素,并对每个元素调用 iteratee。迭代器使用三个参数调用:(value,index|key,collection)。迭代器函数可以通过显式返回 false 来提前退出迭代。

注意:与其他“集合”方法一样,具有“length”属性的对象像数组一样迭代。为了避免这种行为,请使用 forInforOwn 进行对象迭代。

参数

@param (array | iterable | object) $collection 要迭代的集合。

@param callable $iteratee 每次迭代调用的函数。

返回

@return (array | object) 返回 collection

示例

<?php
 use function _\each;

each([1, 2], function ($value) { echo $value; })
// => Echoes `1` then `2`.

each((object) ['a' => 1, 'b' => 2], function ($value, $key) { echo $key; });
// => Echoes 'a' then 'b' (iteration order is not guaranteed).

eachRight

此方法类似于 each,但它是从右到左遍历 collection 的元素。

参数

@param (array | iterable | object) $collection 要迭代的集合。

@param callable $iteratee 每次迭代调用的函数。

返回

@return (array | object) 返回 collection

示例

<?php
 use function _\eachRight;

eachRight([1, 2], function($value) { echo $value; })
// => Echoes `2` then `1`.

filter

遍历 array 的元素,返回返回真值的 predicate 的所有元素数组。谓词使用三个参数调用:(value,index,array)。

注意:remove 不同,此方法返回一个新数组。

参数

@param iterable $array 要迭代的数组。

@param callable $predicate 每次迭代调用的函数。

返回

@return array 返回新的过滤数组。

示例

<?php
 use function _\filter;

$users = [
[ 'user' => 'barney', 'age' => 36, 'active' => true],
[ 'user' => 'fred',   'age' => 40, 'active' => false]
];

filter($users, function($o) { return !$o['active']; });
// => objects for ['fred']

// The `matches` iteratee shorthand.
filter($users, ['age' => 36, 'active' => true]);
// => objects for ['barney']

// The `matchesProperty` iteratee shorthand.
filter($users, ['active', false]);
// => objects for ['fred']

// The `property` iteratee shorthand.
filter($users, 'active');
// => objects for ['barney']

find

遍历 collection 的元素,返回 predicate 返回真值的第一个元素。谓词使用三个参数调用:(value,index|key,collection)。

参数

@param iterable $collection 要检查的集合。

@param callable $predicate 每次迭代调用的函数。

@param int $fromIndex 搜索的起始索引。

返回

@return mixed 返回匹配的元素,否则返回 null

示例

<?php
 use function _\find;

$users = [
['user' => 'barney',  'age' => 36, 'active' => true],
['user' => 'fred',    'age' => 40, 'active' => false],
['user' => 'pebbles', 'age' => 1,  'active' => true]
];

find($users, function($o) { return $o['age'] < 40; });
// => object for 'barney'

// The `matches` iteratee shorthand.
find($users, ['age' => 1, 'active' => true]);
// => object for 'pebbles'

// The `matchesProperty` iteratee shorthand.
find($users, ['active', false]);
// => object for 'fred'

// The `property` iteratee shorthand.
find($users, 'active');
// => object for 'barney'

findLast

此方法类似于 find,但它是从右到左遍历 collection 的元素。

参数

@param iterable $collection 要检查的集合。

@param callable $predicate 每次迭代调用的函数。

@param int $fromIndex 搜索的起始索引。

返回

@return mixed 返回匹配的元素,否则返回 undefined

示例

<?php
 use function _\findLast;

findLast([1, 2, 3, 4], function ($n) { return $n % 2 == 1; })
// => 3

flatMap

通过将 collection 中的每个元素通过 iteratee 运行并扁平化映射结果来创建一个扁平化的值数组。迭代器使用三个参数调用:(value,index|key,collection)。

参数

@param iterable $collection 要迭代的集合。

@param callable $iteratee 每次迭代调用的函数。

返回

@return array 返回新的展平数组。

示例

<?php
 use function _\flatMap;

function duplicate($n) {
return [$n, $n]
}

flatMap([1, 2], 'duplicate')
// => [1, 1, 2, 2]

flatMapDeep

此方法类似于 flatMap,但它递归地扁平化映射结果。

参数

@param iterable $collection 要迭代的集合。

@param callable $iteratee 每次迭代调用的函数。

返回

@return array 返回新的展平数组。

示例

<?php
 use function _\flatMapDeep;

function duplicate($n) {
return [[[$n, $n]]];
}

flatMapDeep([1, 2], 'duplicate');
// => [1, 1, 2, 2]

flatMapDepth

此方法类似于 flatMap,但它递归地扁平化映射结果,直到 depth 次为止。

参数

@param iterable $collection 要迭代的集合。

@param callable $iteratee 每次迭代调用的函数。

@param int $depth 最大递归深度。

返回

@return array 返回新的展平数组。

示例

<?php
 use function _\flatMapDepth;

function duplicate($n) {
return [[[$n, $n]]]
}

flatMapDepth([1, 2], 'duplicate', 2)
// => [[1, 1], [2, 2]]

groupBy

通过将 collection 的每个元素通过 iteratee 运行生成键,创建一个由键组成的数组。分组值的顺序由它们在 collection 中出现的顺序确定。每个键的对应值是一个元素数组,负责生成键。迭代器使用一个参数调用:(value)。

参数

@param iterable $collection 要迭代的集合。

@param callable $iteratee 转换键的迭代器。

返回

@return array 返回组成的聚合对象。

示例

<?php
 use function _\groupBy;

groupBy([6.1, 4.2, 6.3], 'floor');
// => ['6' => [6.1, 6.3], '4' => [4.2]]

groupBy(['one', 'two', 'three'], 'strlen');
// => ['3' => ['one', 'two'], '5' => ['three']]

invokeMap

调用集合中每个元素的path方法,返回每个调用方法的结果数组。将为每个调用方法提供额外的参数。如果path是一个函数,则对集合中的每个元素调用它,并将this绑定到每个元素。

参数

@param iterable $collection 要迭代的集合。

@param (array | callable | string) $path 要调用的方法路径或每个迭代调用的函数。

@param array $args 调用每个方法时要使用的参数。

返回

@return array 结果数组。

示例

<?php
 use function _\invokeMap;

invokeMap([[5, 1, 7], [3, 2, 1]], function($result) { sort($result); return $result;})
// => [[1, 5, 7], [1, 2, 3]]

invokeMap([123, 456], 'str_split')
// => [['1', '2', '3'], ['4', '5', '6']]

keyBy

通过运行集合中的每个元素通过iteratee来创建一个由键组成的对象。每个键的对应值是生成键的最后元素。iteratee用单个参数调用:(value)。

参数

@param iterable $collection 要迭代的集合。

@param callable $iteratee 转换键的迭代器。

返回

@return array 创建的聚合对象数组。

示例

<?php
 use function _\keyBy;

$array = [
['direction' => 'left', 'code' => 97],
['direction' => 'right', 'code' => 100],
];

keyBy($array, function ($o) { return \chr($o['code']); })
// => ['a' => ['direction' => 'left', 'code' => 97], 'd' => ['direction' => 'right', 'code' => 100]]

keyBy($array, 'direction');
// => ['left' => ['direction' => 'left', 'code' => 97], 'right' => ['direction' => 'right', 'code' => 100]]

map

通过运行集合中的每个元素通过iteratee来创建一个值数组。iteratee用三个参数调用:(value, index|key, collection)。

许多lodash-php方法被保护,可以作为_::every_::filter_::map_::mapValues_::reject_::some等方法的迭代器。

受保护的方法有:arychunkcurrycurryRightdropdropRighteveryfillinvertparseIntrandomrangerangeRightrepeatsampleSizeslicesomesortBysplittaketakeRighttemplatetrimtrimEndtrimStartwords

参数

@param (array | object) $collection 要迭代的集合。

@param (callable | string | array) $iteratee 每次迭代调用的函数。

返回

@return array 返回新的映射数组。

示例

<?php
 use function _\map;

function square(int $n) {
return $n * $n;
}

map([4, 8], $square);
// => [16, 64]

map((object) ['a' => 4, 'b' => 8], $square);
// => [16, 64] (iteration order is not guaranteed)

$users = [
[ 'user' => 'barney' ],
[ 'user' => 'fred' ]
];

// The `property` iteratee shorthand.
map($users, 'user');
// => ['barney', 'fred']

orderBy

此方法类似于sortBy,但允许指定迭代器的排序顺序。如果未指定orders,则按升序对所有值进行排序。否则,指定"desc"进行降序排序或"asc"进行升序排序。

参数

@param (iterable | null) $collection 要迭代的集合。

@param (array[] | callable[] | string[]) $iteratee 要排序的迭代器。

@param string[] $orders iteratees的排序顺序。

返回

@return array 返回新的排序数组。

示例

<?php
 use function _\orderBy;

$users = [
['user' => 'fred',   'age' => 48],
['user' => 'barney', 'age' => 34],
['user' => 'fred',   'age' => 40],
['user' => 'barney', 'age' => 36]
]

// Sort by `user` in ascending order and by `age` in descending order.
orderBy($users, ['user', 'age'], ['asc', 'desc'])
// => [['user' => 'barney', 'age' => 36], ['user' => 'barney', 'age' => 34], ['user' => 'fred', 'age' => 48], ['user' => 'fred', 'age' => 40]]

partition

创建一个数组,将元素分为两个组,第一个组包含predicate返回truthy的元素,第二个组包含predicate返回falsey的元素。谓词用单个参数调用:(value)。

参数

@param iterable $collection 要迭代的集合。

@param callable $predicate 每次迭代调用的函数。

返回

@return array 分组元素的数组。

示例

<?php
 use function _\partition;

$users = [
['user' => 'barney',  'age' => 36, 'active' => false],
['user' => 'fred',    'age' => 40, 'active' => true],
['user' => 'pebbles', 'age' => 1,  'active' => false]
];

partition($users, function($user) { return $user['active']; })
// => objects for [['fred'], ['barney', 'pebbles']]

reduce

collection减少为一个值,该值是通过运行每个元素通过iteratee来累积的结果,其中每个连续调用都提供前一个调用的返回值。如果未提供accumulator,则使用collection的第一个元素作为初始值。iteratee用四个参数调用:(accumulator, value, index|key, collection)。

许多lodash方法被保护,可以作为reducereduceRighttransform等方法的迭代器。

受保护的方法有:assigndefaultsdefaultsDeepincludesmergeorderBysortBy

参数

@param iterable $collection 要迭代的集合。

@param mixed $iteratee 每次迭代调用的函数。

@param mixed $accumulator 初始值。

返回

@return mixed 返回累积值。

示例

<?php
 use function _\reduce;

reduce([1, 2], function($sum, $n) { return $sum + $n; }, 0)
// => 3

reduce(['a' => 1, 'b' => 2, 'c' => 1], function ($result, $value, $key) {
if (!isset($result[$value])) {
$result[$value] = [];
}
$result[$value][] = $key;

return $result;
}, [])
// => ['1' => ['a', 'c'], '2' => ['b']] (iteration order is not guaranteed)

reduceRight

此方法类似于reduce,但它是从右到左迭代collection的元素。

参数

@param iterable $collection 要迭代的集合。

@param mixed $iteratee 每次迭代调用的函数。

@param mixed $accumulator 初始值。

返回

@return mixed 返回累积值。

示例

<?php
 use function _\reduceRight;

$array = [[0, 1], [2, 3], [4, 5]];

reduceRight(array, (flattened, other) => flattened.concat(other), [])
// => [4, 5, 2, 3, 0, 1]

reject

filter的相反方法,此方法返回collectionpredicate不返回truthy的元素。

参数

@param iterable $collection 要迭代的集合。

@param callable $predicate 每次迭代调用的函数。

返回

@return array 返回新的过滤数组。

示例

<?php
 use function _\reject;

$users = [
['user' => 'barney', 'active' => true],
['user' => 'fred',   'active' => false]
]

reject($users, 'active')
// => objects for ['fred']

size

通过返回数组的长度或对象的公共属性数量来获取collection的大小。

参数

@param (array | object | string) $collection 要检查的集合。

返回

@return int 返回集合的大小。

示例

<?php
 use function _\size;

size([1, 2, 3]);
// => 3

size(new class { public $a = 1; public $b = 2; private $c = 3; });
// => 2

size('pebbles');
// => 7

some

检查 predicate 是否对 collection 中的任何元素返回真值。一旦 predicate 返回真值,迭代就会停止。谓词使用三个参数调用:(值,索引|键,集合)。

参数

@param iterable $collection 要迭代的集合。

@param (callable | string | array) $predicate 每次迭代调用的函数。

返回

@return boolean 如果任何元素通过谓词检查,则返回 true,否则返回 false

示例

<?php
 use function _\some;

some([null, 0, 'yes', false], , function ($value) { return \is_bool($value); }));
// => true

$users = [
['user' => 'barney', 'active' => true],
['user' => 'fred',   'active' => false]
];

// The `matches` iteratee shorthand.
some($users, ['user' => 'barney', 'active' => false ]);
// => false

// The `matchesProperty` iteratee shorthand.
some($users, ['active', false]);
// => true

// The `property` iteratee shorthand.
some($users, 'active');
// => true

sortBy

通过运行集合中的每个元素通过每个迭代器,创建一个按升序排序的元素数组。此方法执行稳定排序,即它保留相等元素的原始排序顺序。迭代器使用一个参数调用:(值)。

参数

@param (array | object | null) $collection 要迭代的集合。

@param (callable | callable[]) $iteratees 用于排序的迭代器。

返回

@return array 返回新排序数组。

示例

<?php
 use function _\sortBy;

$users = [
[ 'user' => 'fred',   'age' => 48 ],
[ 'user' => 'barney', 'age' => 36 ],
[ 'user' => 'fred',   'age' => 40 ],
[ 'user' => 'barney', 'age' => 34 ],
];

sortBy($users, [function($o) { return $o['user']; }]);
// => [['user' => 'barney', 'age' => 36], ['user' => 'barney', 'age' => 34], ['user' => 'fred', 'age' => 48], ['user' => 'fred', 'age' => 40]]

sortBy($users, ['user', 'age']);
// => [['user' => 'barney', 'age' => 34], ['user' => 'barney', 'age' => 36], ['user' => 'fred', 'age' => 40], ['user' => 'fred', 'age' => 48]]

日期

now

获取自 Unix 纪元(1970 年 1 月 1 日 00:00:00 UTC)以来经过的毫秒数的时间戳。

参数

返回

@return int 返回时间戳。

示例

<?php
 use function _\now;

now();
// => 1511180325735

函数

after

before 相反;此方法创建一个函数,当它被调用 n 次或更多次时,会调用 func

参数

@param int $n 在调用 func 之前要调用的次数。

@param Callable $func 要限制的函数。

返回

@return Callable 返回新的限制函数。

示例

<?php
 use function _\after;

$saves = ['profile', 'settings'];

$done = after(count($saves), function() {
echo 'done saving!';
});

forEach($saves, function($type) use($done) {
asyncSave([ 'type' => $type, 'complete' => $done ]);
});
// => Prints 'done saving!' after the two async saves have completed.

ary

创建一个函数,该函数调用 func,最多有 n 个参数,忽略任何额外的参数。

参数

@param callable $func 要限制参数的函数。

@param int $n 参数限制。

返回

@return Callable 返回新的限制函数。

示例

<?php
 use function _\ary;

map(['6', '8', '10'], ary('intval', 1));
// => [6, 8, 10]

before

创建一个函数,该函数在调用次数少于 n 次时调用 func,并将调用此函数的参数传递给 func。后续调用此函数返回最后一次 func 调用的结果。

参数

@param int $n 调用 func 时不再调用的调用次数。

@param callable $func 要限制的函数。

返回

@return callable 返回新的限制函数。

示例

<?php
 use function _\before;

$users = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
$result = uniqBy(map($users, before(5, [$repository, 'find'])), 'id')
// => Fetch up to 4 results.

bind

创建一个函数,该函数以 objectthis 绑定和 partials 预先应用到它接收的参数上调用 func

参数

@param callable $function 要绑定的函数。

@param (object | mixed) $object funcobject 绑定。

@param array<int, mixed> $partials 要部分应用参数。

返回

@return callable 返回新的绑定函数。

示例

<?php
 use function _\bind;

function greet($greeting, $punctuation) {
return $greeting . ' ' . $this->user . $punctuation;
}

$object = $object = new class {
public $user = 'fred';
};

$bound = bind('greet', $object, 'hi');
$bound('!');
// => 'hi fred!'

bindKey

创建一个函数,该函数将 $partials 预先应用到它接收的参数上,并调用 $object$function 方法。

此方法与 bind 不同,允许绑定函数引用可能已重新定义或尚未存在的方法。

参数

@param object $object 在其上调用方法的对象。

@param string $function 方法的名称。

@param array<int, mixed> $partials 要部分应用参数。

返回

@return callable 返回新的绑定函数。

示例

<?php
 use function _\bindKey;

$object = new class {
private $user = 'fred';
function greet($greeting, $punctuation) {
return $greeting.' '.$this->user.$punctuation;
}
};

$bound = bindKey($object, 'greet', 'hi');
$bound('!');
// => 'hi fred!'

curry

创建一个函数,该函数接受 func 的参数,如果已提供至少 arity 数量的参数,则调用 func 返回其结果,或者返回一个函数,该函数接受剩余的 func 参数,依此类推。如果 func.length 不充分,则可以指定 func 的 arity。

_.curry.placeholder 值,在单一构建中默认为 _,可以用作提供参数的占位符。

注意: 此方法不设置 curried 函数的 "length" 属性。

参数

@param callable $func 要 currying 的函数。

@param (int | null) $arity func 的 arity。

返回

@return callable 返回新的 curried 函数。

示例

<?php
 use function _\curry;

$abc = function($a, $b, $c) {
return [$a, $b, $c];
};

$curried = curry($abc);

$curried(1)(2)(3);
// => [1, 2, 3]

$curried(1, 2)(3);
// => [1, 2, 3]

$curried(1, 2, 3);
// => [1, 2, 3]

// Curried with placeholders.
$curried(1)(_, 3)(2);
// => [1, 2, 3]

delay

在等待wait毫秒后调用func。当调用func时,将提供任何额外的参数。

参数

@param callable $func 要延迟调用的函数。

@param int $wait 延迟调用的毫秒数。

@param array<int, mixed> $args

返回

@return int 定时器ID。

示例

<?php
 use function _\delay;

delay(function($text) {
echo $text;
}, 1000, 'later');
// => Echo 'later' after one second.

flip

创建一个函数,使用反转的参数调用func

参数

@param callable $func 要反转参数的函数。

返回

@return callable 返回新的反转函数。

示例

<?php
 use function _\flip;

$flipped = flip(function() {
return func_get_args();
});

flipped('a', 'b', 'c', 'd');
// => ['d', 'c', 'b', 'a']

memoize

创建一个函数,用于缓存func的结果。如果提供了resolver,它将根据传递给缓存函数的参数确定存储结果的缓存键。默认情况下,传递给缓存函数的第一个参数用作映射缓存键。

注意:缓存作为缓存函数上的cache属性公开。其创建可以通过用实现Map方法接口的cleardeletegethasset方法的构造函数替换_.memoize.Cache来定制。

参数

@param callable $func 要缓存输出的函数。

@param (callable | null) $resolver 解析缓存键的函数。

返回

@return callable 返回新的缓存函数。

示例

<?php
 use function _\memoize;

$object = ['a' => 1, 'b' => 2];
$other = ['c' => 3, 'd' => 4];

$values = memoize('_\values');
$values($object);
// => [1, 2]

$values($other);
// => [3, 4]

$object['a'] = 2;
$values($object);
// => [1, 2]

// Modify the result cache.
$values->cache->set($object, ['a', 'b']);
$values($object);
// => ['a', 'b']

negate

创建一个函数,它对谓词func的结果进行取反。

参数

@param callable $predicate 要取反的谓词。

返回

@return callable 返回新的取反函数。

示例

<?php
 use function _\negate;

function isEven($n) {
return $n % 2 == 0;
}

filter([1, 2, 3, 4, 5, 6], negate($isEven));
// => [1, 3, 5]

once

创建一个函数,它仅调用一次func。重复调用该函数将返回第一次调用的值。该函数使用创建函数的参数调用func

参数

@param callable $func 要限制的函数。

返回

@return callable 返回新的受限函数。

示例

<?php
 use function _\once;

$initialize = once('createApplication');
$initialize();
$initialize();
// => `createApplication` is invoked once

overArgs

创建一个函数,它使用转换后的参数调用func

参数

@param callable $func 要包装的函数。

@param callable[] $transforms 参数转换。

返回

@return callable 返回新的函数。

示例

<?php
 use function _\overArgs;

function doubled($n) {
return $n * 2;
}

function square($n) {
return $n * $n;
}

$func = overArgs(function($x, $y) {
return [$x, $y];
}, ['square', 'doubled']);

$func(9, 3);
// => [81, 6]

$func(10, 5);
// => [100, 10]

partial

创建一个函数,它将partials附加到它接收到的参数上,以调用func

参数

@param callable $func 要部分应用参数的函数。

@param array<int, mixed> $partials 要部分应用参数。

返回

@return callable 返回新的部分应用函数。

示例

<?php
 use function _\partial;

function greet($greeting, $name) {
return $greeting . ' ' . $name;
}

$sayHelloTo = partial('greet', 'hello');
$sayHelloTo('fred');
// => 'hello fred'

rest

创建一个函数,它使用创建函数的this绑定和从start开始及以后的参数数组调用func

参数

@param callable $func 要应用剩余参数的函数。

@param (int | null) $start 剩余参数的起始位置。

返回

@return callable 返回新的函数。

示例

<?php
 use function _\rest;

$say = rest(function($what, $names) {
return $what . ' ' . implode(', ', initial($names)) .
(size($names) > 1 ? ', & ' : '') . last($names);
});

$say('hello', 'fred', 'barney', 'pebbles');
// => 'hello fred, barney, & pebbles'

spread

创建一个函数,它使用创建函数的this绑定和类似于Function#apply的参数数组调用func

注意:此方法基于展开运算符

参数

@param callable $func 要展开参数的函数。

@param int $start 展开的起始位置。

返回

@return callable 返回新的函数。

示例

<?php
 use function _\spread;

$say = spread(function($who, $what) {
return $who . ' says ' . $what;
});

$say(['fred', 'hello']);
// => 'fred says hello'

unary

创建一个函数,它接受最多一个参数,忽略任何额外的参数。

参数

@param callable $func 要限制参数的函数。

返回

@return callable 返回新的受限函数。

示例

<?php
 use function _\unary;

map(['6', '8', '10'], unary('intval'));
// => [6, 8, 10]

wrap

创建一个函数,它将value作为其第一个参数传递给wrapper。传递给函数的任何其他参数都附加到传递给wrapper的参数上。

参数

@param mixed $value 要包装的值。

@param callable $wrapper 包装函数。

返回

@return callable 返回新的函数。

示例

<?php
 use function _\wrap;

$p = wrap('_\escape', function($func, $text) {
return '<p>' . $func($text) . '</p>';
});

$p('fred, barney, & pebbles');
// => '<p>fred, barney, &amp; pebbles</p>'

语言

eq

比较两个值以确定它们是否相等。

参数

@param mixed $value 要比较的值。

@param mixed $other 要比较的另一个值。

返回

@return boolean 如果值相等,则返回 true,否则返回 false

示例

<?php
 use function _\eq;

$object = (object) ['a' => 1];
$other = (object) ['a' => 1];

eq($object, $object);
// => true

eq($object, $other);
// => false

eq('a', 'a');
// => true

eq(['a'], (object) ['a']);
// => false

eq(INF, INF);
// => true

isEqual

在两个值之间执行深度比较以确定它们是否相等。

注意:此方法支持比较数组、布尔值、DateTime对象、异常对象、SPLObjectStorage、数字、字符串、类型化数组、资源、DOM节点。对象通过其自身的属性进行比较,而不是继承的可枚举属性。

参数

@param mixed $value 要比较的值。

@param mixed $other 要比较的另一个值。

返回

@return bool 如果值相等,则返回 true,否则返回 false

示例

<?php
 use function _\isEqual;


$object = [ 'a' => 1]
$other = ['a' => '1']

isEqual($object, $other)
// => true

$object === $other
// => false

isError

检查 value 是否为 \Exception\ParseError、\Error、\Throwable、\SoapFault、\DOMException、\PDOException` 对象。

参数

@param mixed $value 要检查的值。

返回

@return boolean 如果 value 是错误对象,则返回 true,否则返回 false

示例

<?php
 use function _\isError;

isError(new \Exception())
// => true

isError(\Exception::Class)
// => false

数学

add

加法两个数字。

参数

@param (int | float | string) $augend 加法中的第一个数字。

@param (int | float | string) $addend 加法中的第二个数字。

返回

@return (int | float) 返回总和。

示例

<?php
 use function _\add;

add(6, 4);
// => 10

max

计算 array 的最大值。如果 array 为空或为假,则返回 null。

参数

@param (array | null) $array 要迭代的数组。

返回

@return (int | null) 返回最大值。

示例

<?php
 use function _\max;

max([4, 2, 8, 6]);
// => 8

max([]);
// => null

maxBy

此方法类似于 max,但它接受一个 iteratee,该迭代器为 array 中的每个元素调用以生成值排名的准则。迭代器用单个参数调用:(值)。

参数

@param array $array 要迭代的数组。

@param (callable | string) $iteratee 每个元素调用的迭代器。

返回

@return mixed 返回最大值。

示例

<?php
 use function _\maxBy;

$objects = [['n' => 1], ['n' => 2]];

maxBy($objects, function($o) { return $o['n']; });
// => ['n' => 2]

// The `property` iteratee shorthand.
maxBy($objects, 'n');
// => ['n' => 2]

数字

clamp

number 调整到包含 lowerupper 界限。

参数

@param int $number 要调整的数字。

@param int $lower 下界。

@param int $upper 上界。

返回

@return int 返回调整后的数字。

示例

<?php
 use function _\clamp;

clamp(-10, -5, 5)
// => -5

clamp(10, -5, 5)
// => 5

inRange

检查 number 是否在 startend 之间。如果未指定 end,则将其设置为 start,然后将 start 设置为 0。如果 start 大于 end,则交换参数以支持负范围。

参数

@param float $number 要检查的数字。

@param float $start 范围的开始。

@param float $end 范围的结束。

返回

@return boolean 如果 number 在范围内,则返回 true,否则返回 false

示例

<?php
 use function _\inRange;

inRange(3, 2, 4)
// => true

inRange(4, 8)
// => true

inRange(4, 2)
// => false

inRange(2, 2)
// => false

inRange(1.2, 2)
// => true

inRange(5.2, 4)
// => false

inRange(-3, -2, -6)
// => true

random

生成一个介于包含 lowerupper 界限之间的随机数。如果只提供一个参数,则返回一个介于 0 和给定数字之间的数字。如果 floatingtrue,或 lowerupper 是浮点数,则返回浮点数而不是整数。

参数

@param (int | float | bool) $lower 下界。

@param (int | float | bool) $upper 上界。

@param (bool | null) $floating 指定返回浮点数。

返回

@return (int | float) 返回随机数。

示例

<?php
 use function _\random;

random(0, 5)
// => an integer between 0 and 5

random(5)
// => also an integer between 0 and 5

random(5, true)
// => a floating-point number between 0 and 5

random(1.2, 5.2)
// => a floating-point number between 1.2 and 5.2

对象

get

获取对象的路径值。如果解析的值是 null,则用 defaultValue 代替。

参数

@param mixed $object 从中获取值的关联数组或对象。

@param (array | string) $path 点分隔或字符串数组。

@param mixed $defaultValue (可选)未解析或 null 值返回的值。

返回

@return mixed 返回解析的值。

示例

<?php
 use function _\get;

$sampleArray = ["key1" => ["key2" => ["key3" => "val1", "key4" => ""]]];
get($sampleArray, 'key1.key2.key3');
// => "val1"

get($sampleArray, 'key1.key2.key5', "default");
// => "default"

get($sampleArray, 'key1.key2.key4', "default");
// => ""

pick

创建一个由选定的 object 属性组成的对象。

参数

@param object $object 源对象。

@param (string | string[]) $paths 要选择的属性路径。

返回

@return \stdClass 返回新的对象。

示例

<?php
 use function _\pick;

$object = (object) ['a' => 1, 'b' => '2', 'c' => 3];

pick($object, ['a', 'c']);
// => (object) ['a' => 1, 'c' => 3]

pickBy

创建一个对象,其中包含 object 属性,这些属性对于 predicate 返回真值。谓词使用两个参数调用:(值,键)。

参数

@param (object | null) $object 源对象。

@param callable $predicate 每个属性调用的函数。

返回

@return \stdClass 返回新的对象。

示例

<?php
 use function _\pickBy;

$object = (object) ['a' => 1, 'b' => 'abc', 'c' => 3];

pickBy(object, 'is_numeric');
// => (object) ['a' => 1, 'c' => 3]

序列

chain

创建一个包装 valuelodash 包装实例,启用显式方法链序列。此类序列的结果必须使用 ->value() 解包。

参数

@param mixed $value 要包装的值。

返回

@return _ 返回新的 lodash 包装实例。

示例

<?php
 use function _\chain;

$users = [
['user' => 'barney',  'age' => 36],
['user' => 'fred',    'age' => 40],
['user' => 'pebbles', 'age' => 1 ],
];

$youngest = chain($users)
->sortBy('age')
->map(function($o) {
return $o['user'] . ' is ' . $o['age'];
})
->head()
->value();
// => 'pebbles is 1'

字符串

camelCase

string 转换为 驼峰式

参数

@param string $string 要转换的字符串。

返回

@return string 返回驼峰式字符串。

示例

<?php
 use function _\camelCase;

camelCase('Foo Bar')
// => 'fooBar'

camelCase('--foo-bar--')
// => 'fooBar'

camelCase('__FOO_BAR__')
// => 'fooBar'

capitalize

string 的第一个字符转换为大写,其余字符转换为小写。

参数

@param string $string 要大写的字符串。

返回

@return string 返回大写后的字符串。

示例

<?php
 use function _\capitalize;

capitalize('FRED')
// => 'Fred'

deburr

通过将 [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) 和 [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) 字符转换为基本拉丁字母以及删除 [组合变音符号](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) 来去除 string 中的重音符号。

参数

@param string $string 要去除重音的字符串。

返回

@return string 返回去除重音的字符串。

示例

<?php
 use function _\deburr;

deburr('déjà vu')
// => 'deja vu'

endsWith

检查 string 是否以指定的目标字符串结束。

参数

@param string $string 要检查的字符串。

@param string $target 要搜索的字符串。

@param int $position 搜索到的位置。

返回

@return boolean 如果 stringtarget 结束,则返回 true,否则返回 false

示例

<?php
 use function _\endsWith;

endsWith('abc', 'c')
// => true

endsWith('abc', 'b')
// => false

endsWith('abc', 'b', 2)
// => true

escape

string 中的字符 "&"、"<"、">"、'"' 和 "'" 转换为其相应的 HTML 实体。

尽管 ">" 字符被转义以保持对称,但像 ">" 和 "/" 这样的字符在 HTML 中不需要转义,并且除非它们是标签或未引用的属性值的一部分,否则没有特殊意义。有关更多详细信息,请参阅 Mathias Bynens 的文章(在“半相关趣闻”部分)。

当与 HTML 一起工作时,您应该始终 引用属性值 以减少 XSS 攻击向量。

参数

@param string $string 要转义的字符串。

返回

@return string 返回转义后的字符串。

示例

<?php
 use function _\escape;

escape('fred, barney, & pebbles')
// => 'fred, barney, &amp pebbles'

escapeRegExp

string 中转义 RegExp 特殊字符 "^"、" $"、""、"."、"*"、"+"、"?"、"(")、")"、"["]、"]"、"{"} 和 "|"。

参数

@param string $string 要转义的字符串。

返回

@return string 返回转义后的字符串。

示例

<?php
 use function _\escapeRegExp;

escapeRegExp('[lodash](https://lodash.node.org.cn/)')
// => '\[lodash\]\(https://lodash\.com/\)'

kebabCase

string 转换为 短横线式

参数

@param string $string 要转换的字符串。

返回

@return string 返回短横线式字符串。

示例

<?php
 use function _\kebabCase;

kebabCase('Foo Bar')
// => 'foo-bar'

kebabCase('fooBar')
// => 'foo-bar'

kebabCase('__FOO_BAR__')
// => 'foo-bar'

lowerCase

string(作为空格分隔的单词)转换为小写。

参数

@param string $string 要转换的字符串。

返回

@return string 返回小写后的字符串。

示例

<?php
 use function _\lowerCase;

lowerCase('--Foo-Bar--')
// => 'foo bar'

lowerCase('fooBar')
// => 'foo bar'

lowerCase('__FOO_BAR__')
// => 'foo bar'

lowerFirst

string 的第一个字符转换为小写。

参数

@param string $string 要转换的字符串。

返回

@return string 返回转换后的字符串。

示例

<?php
 use function _\lowerFirst;

lowerFirst('Fred')
// => 'fred'

lowerFirst('FRED')
// => 'fRED'

pad

如果 string 的长度短于 length,则在左右两侧填充 string。如果填充字符不能均匀地除以 length,则截断填充字符。

参数

@param string $string 要填充的字符串。

@param int $length 填充长度。

@param string $chars 用作填充的字符串。

返回

@return string 返回填充后的字符串。

示例

<?php
 use function _\pad;

pad('abc', 8)
// => '  abc   '

pad('abc', 8, '_-')
// => '_-abc_-_'

pad('abc', 2)
// => 'abc'

padEnd

如果 string 的长度短于 length,则在右侧填充 string。如果填充字符超出 length,则截断填充字符。

参数

@param string $string 要填充的字符串。

@param int $length 填充长度。

@param string $chars 用作填充的字符串。

返回

@return string 返回填充后的字符串。

示例

<?php
 use function _\padEnd;

padEnd('abc', 6)
// => 'abc   '

padEnd('abc', 6, '_-')
// => 'abc_-_'

padEnd('abc', 2)
// => 'abc'

padStart

如果字符串小于length,则在左侧填充字符串。如果填充字符超出length,则被截断。

参数:

@param string $string ='' 要填充的字符串。

@param int $length 填充长度。

@param string $chars 用作填充的字符串。

返回

@return string 返回填充后的字符串。

示例

<?php
 use function _\padStart;

padStart('abc', 6)
// => '   abc'

padStart('abc', 6, '_-')
// => '_-_abc'

padStart('abc', 2)
// => 'abc'

parseInt

将字符串转换为指定基数的整数。如果radixundefined0,则使用10作为基数,除非字符串是十六进制,在这种情况下使用16作为基数。

注意:此方法使用PHP内置的整数转换,这可能与parseInt的ES5实现不完全一致。

参数

@param (int | float | string) $string 要转换的字符串。

@param int $radix 解析字符串的基数。

返回

@return int 返回转换后的整数。

示例

<?php
 use function _\parseInt;

parseInt('08')
// => 8

repeat

重复给定字符串n次。

参数

@param string $string 要重复的字符串。

@param int $n 重复字符串的次数。

返回

@return string 返回重复的字符串。

示例

<?php
 use function _\repeat;

repeat('*', 3)
// => '***'

repeat('abc', 2)
// => 'abcabc'

repeat('abc', 0)
// => ''

replace

将字符串中的pattern替换为replacement

注意:此方法基于String#replace

参数

@param string $string 要修改的字符串。

@param string $pattern 要替换的模式。

@param (callable | string) $replacement 匹配替换。

返回

@return string 返回修改后的字符串。

示例

<?php
 use function _\replace;

replace('Hi Fred', 'Fred', 'Barney')
// => 'Hi Barney'

snakeCase

将字符串转换为snake case

参数

@param string $string 要转换的字符串。

返回

@return string 返回snake case字符串。

示例

<?php
 use function _\snakeCase;

snakeCase('Foo Bar')
// => 'foo_bar'

snakeCase('fooBar')
// => 'foo_bar'

snakeCase('--FOO-BAR--')
// => 'foo_bar'

split

根据separator拆分字符串。

注意:此方法基于String#split

参数

@param string $string 要拆分的字符串。

@param string $separator 拆分的分隔符模式。

@param int $limit 结果的长度。

返回

@return array 返回字符串段。

示例

<?php
 use function _\split;

split('a-b-c', '-', 2)
// => ['a', 'b']

startCase

将字符串转换为start case

参数

@param string $string 要转换的字符串。

返回

@return string 返回start case字符串。

示例

<?php
 use function _\startCase;

startCase('--foo-bar--')
// => 'Foo Bar'

startCase('fooBar')
// => 'Foo Bar'

startCase('__FOO_BAR__')
// => 'FOO BAR'

startsWith

检查字符串是否以给定的目标字符串开头。

参数

@param string $string 要检查的字符串。

@param string $target 要搜索的字符串。

@param int $position 从该位置开始搜索。

返回

@return boolean 如果字符串以target开头,则返回true,否则返回false

示例

<?php
 use function _\startsWith;

startsWith('abc', 'a')
// => true

startsWith('abc', 'b')
// => false

startsWith('abc', 'b', 1)
// => true

template

创建一个编译后的模板函数,该函数可以插入在“interpolate”定界符中的数据属性,在“escape”定界符中转义插入的数据属性,并在“evaluate”定界符中执行PHP。数据属性可以作为模板中的自由变量访问。如果提供了设置对象,则它优先于$templateSettings值。

RegExp $options['escape'] = _::$templateSettings['escape'] HTML "escape"定界符。RegExp $options['evaluate'] = _::$templateSettings['evaluate'] "evaluate"定界符。array $options['imports'] = _::$templateSettings['imports'] 将其作为自由变量导入模板的对象。RegExp $options['interpolate'] = _::$templateSettings['interpolate'] "interpolate"定界符。

参数

@param string $string 模板字符串。

@param array $options 选项数组。

返回

@return callable 返回编译后的模板函数。

示例

<?php
 use function _\template;

// Use the "interpolate" delimiter to create a compiled template.
$compiled = template('hello <%= user %>!')
$compiled([ 'user' => 'fred' ])
// => 'hello fred!'

// Use the HTML "escape" delimiter to escape data property values.
$compiled = template('<b><%- value %></b>')
$compiled([ 'value' => '<script>' ])
// => '<b>&lt;script&gt;</b>'

// Use the "evaluate" delimiter to execute JavaScript and generate HTML.
$compiled = template('<% foreach($users as $user) { %><li><%- user %></li><% }%>')
$compiled([ 'users' => ['fred', 'barney'] ])
// => '<li>fred</li><li>barney</li>'

// Use the internal `print` function in "evaluate" delimiters.
$compiled = template('<% print("hello " + $user)%>!')
$compiled([ 'user' => 'barney' ])
// => 'hello barney!'

// Use backslashes to treat delimiters as plain text.
$compiled = template('<%= "\\<%- value %\\>" %>')
$compiled([ 'value' => 'ignored' ])
// => '<%- value %>'

// Use the `imports` option to import functions or classes with aliases.
$text = '<% all($users, function($user) { %><li><%- user %></li><% })%>'
$compiled = template($text, { 'imports': { '_\each': 'all' } })
$compiled([ 'users' => ['fred', 'barney'] ])
// => '<li>fred</li><li>barney</li>'

// Use custom template delimiters.
\_::$templateSettings['interpolate'] = '{{([\s\S]+?)}}'
$compiled = template('hello {{ user }}!')
$compiled([ 'user' => 'mustache' ])
// => 'hello mustache!'

// Use the `source` property to access the compiled source of the template
template($mainText)->source;

toLower

将整个字符串转换为小写。

参数

@param string $string 要转换的字符串。

返回

@return string 返回小写后的字符串。

示例

<?php
 use function _\toLower;

toLower('--Foo-Bar--')
// => '--foo-bar--'

toLower('fooBar')
// => 'foobar'

toLower('__FOO_BAR__')
// => '__foo_bar__'

toUpper

将整个字符串转换为大写。

参数

@param string $string 要转换的字符串。

返回

@return string 返回大写字符串。

示例

<?php
 use function _\toUpper;

toUpper('--foo-bar--')
// => '--FOO-BAR--'

toUpper('fooBar')
// => 'FOOBAR'

toUpper('__foo_bar__')
// => '__FOO_BAR__'

trim

从字符串中删除前导和尾随空白或指定的字符。

参数

@param string $string 要修剪的字符串。

@param string $chars 要修剪的字符。

返回

@return string 返回修剪后的字符串。

示例

<?php
 use function _\trim;

trim('  abc  ')
// => 'abc'

trim('-_-abc-_-', '_-')
// => 'abc'

trimEnd

从字符串中删除尾随空白或指定的字符。

参数

@param string $string 要修剪的字符串。

@param string $chars 要修剪的字符。

返回

@return string 返回修剪后的字符串。

示例

<?php
 use function _\trimEnd;

trimEnd('  abc  ')
// => '  abc'

trimEnd('-_-abc-_-', '_-')
// => '-_-abc'

trimStart

从字符串中删除前导空白或指定的字符。

参数

@param string $string 要修剪的字符串。

@param string $chars 要修剪的字符。

返回

@return string 返回修剪后的字符串。

示例

<?php
 use function _\trimStart;

trimStart('  abc  ')
// => 'abc  '

trimStart('-_-abc-_-', '_-')
// => 'abc-_-'

truncate

如果字符串长度超过给定的最大字符串长度,则截断字符串。截断字符串的最后字符被省略字符串替换,默认为 "..."。

length = 30 最大字符串长度。omission = '...' 表示文本被省略的字符串。separator 截断的分隔符模式。

参数

@param string $string 要截断的字符串。

@param array $options 选项对象。

返回

@return string 返回截断后的字符串。

示例

<?php
 use function _\truncate;

truncate('hi-diddly-ho there, neighborino')
// => 'hi-diddly-ho there, neighbo...'

truncate('hi-diddly-ho there, neighborino', [
'length' => 24,
'separator' => ' '
])
// => 'hi-diddly-ho there,...'

truncate('hi-diddly-ho there, neighborino', [
'length' => 24,
'separator' => '/,? +/'
])
// => 'hi-diddly-ho there...'

truncate('hi-diddly-ho there, neighborino', [
'omission' => ' [...]'
])
// => 'hi-diddly-ho there, neig [...]'

unescape

此方法为 escape 的逆操作,将字符串中的 HTML 实体 &amp;&lt;&gt;&quot;&#39; 转换为其对应的字符。

参数

@param string $string 要取消转义的字符串。

返回

@return string 返回取消转义的字符串。

示例

<?php
 use function _\unescape;

unescape('fred, barney, &amp; pebbles')
// => 'fred, barney, & pebbles'

upperCase

将作为空格分隔的单词的 string 转换为大写。

参数

@param string $string 要转换的字符串。

返回

@return string 返回大写字符串。

示例

<?php
 use function _\upperCase;

upperCase('--foo-bar')
// => 'FOO BAR'

upperCase('fooBar')
// => 'FOO BAR'

upperCase('__foo_bar__')
// => 'FOO BAR'

upperFirst

string 的第一个字符转换为大写。

参数

@param string $string 要转换的字符串。

返回

@return string 返回转换后的字符串。

示例

<?php
 use function _\upperFirst;

upperFirst('fred')
// => 'Fred'

upperFirst('FRED')
// => 'FRED'

words

将字符串拆分为其单词的数组。

参数

@param string $string 要检查的字符串。

@param string $pattern 匹配单词的模式。

返回

@return array 返回字符串的单词。

示例

<?php
 use function _\words;

words('fred, barney, & pebbles')
// => ['fred', 'barney', 'pebbles']

words('fred, barney, & pebbles', '/[^, ]+/g')
// => ['fred', 'barney', '&', 'pebbles']

实用工具

attempt

尝试调用 func,返回结果或捕获的错误对象。调用 func 时,将提供额外的参数。

参数:

@param callable $func 要尝试的函数。

@param array<int, mixed> $args 调用 func 时要使用的参数。

返回

@return (mixed | \Throwable) 返回 func 的结果或错误对象。

示例

<?php
 use function _\attempt;

// Avoid throwing errors for invalid PDO data source.
$elements = attempt(function () {
new \PDO(null);
});

if (isError($elements)) {
$elements = [];
}

defaultTo

检查值以确定是否应返回默认值。如果值是 NaN 或 null,则返回默认值。

参数

@param mixed $value 任何值。

@param mixed $defaultValue 当 $value 是 null 或 NAN 时返回的值。

返回

@return mixed 返回 value

示例

<?php
 use function _\defaultTo;

$a = null;

defaultTo($a, "default");
// => "default"

$a = "x";

defaultTo($a, "default");
// => "x"

identity

此方法返回它接收的第一个参数。

参数

@param mixed $value 任何值。

返回

@return mixed 返回 value

示例

<?php
 use function _\identity;

$object = ['a' => 1];

identity($object) === $object;
// => true

property

创建一个函数,该函数返回给定对象的 path 上的值。

参数

@param (array | string) $path 要获取的属性的路径。

返回

@return callable 返回新的访问器函数。

示例

<?php
 use function _\property;

$objects = [
[ 'a' => [ 'b' => 2 ] ],
[ 'a' => [ 'b' => 1 ] ]
];

map($objects, property('a.b'));
// => [2, 1]

map(sortBy($objects, property(['a', 'b'])), 'a.b');
// => [1, 2]