[英]Javascript Array.some() and Array.every() equivalent for Set?
[英]What is PHP's equivalent of JavaScript's "array.every()"?
我目前正在尝试将一些 JavaScript 移植到 PHP。 但是,我似乎找不到与 JavaScript array.every()
function 等效的 PHP。 我找到了 PHP 的each()
function,但它似乎并不是我所需要的。
我目前正在尝试将一些JavaScript移植到PHP。 但是,我似乎找不到与JavaScript array.every()
函数等效的PHP。 我找到了PHP的each()
函数,但这似乎并不是我真正需要的。
我目前正在尝试将一些JavaScript移植到PHP。 但是,我似乎找不到与JavaScript array.every()
函数等效的PHP。 我找到了PHP的each()
函数,但这似乎并不是我真正需要的。
我目前正在尝试将一些JavaScript移植到PHP。 但是,我似乎找不到与JavaScript array.every()
函数等效的PHP。 我找到了PHP的each()
函数,但这似乎并不是我真正需要的。
我目前正在尝试将一些JavaScript移植到PHP。 但是,我似乎找不到与JavaScript array.every()
函数等效的PHP。 我找到了PHP的each()
函数,但这似乎并不是我真正需要的。
我目前正在尝试将一些JavaScript移植到PHP。 但是,我似乎找不到与JavaScript array.every()
函数等效的PHP。 我找到了PHP的each()
函数,但这似乎并不是我真正需要的。
我目前正在尝试将一些JavaScript移植到PHP。 但是,我似乎找不到与JavaScript array.every()
函数等效的PHP。 我找到了PHP的each()
函数,但这似乎并不是我真正需要的。
这是另一种选择(实际上,许多数组函数的使用方式非常相似):
$bool = !empty(array_filter(['my', 'test', 'array'], function ($item) {
return $item === 'array';
}));
或者对于 PHP7.4+,使用箭头函数:
$bool = !empty(array_filter(['my', 'test', 'array'], fn($item) => $item === 'array'));
...看起来很接近 JS:
let bool = ['my', 'test', 'array'].every(item => item === 'array'));
并爆发:
function array_every(array $array, callable $callback) {
return !empty(array_filter($array, $callback));
}
$myArr = ['my', 'test', 'array'];
$myTest = fn($item) => $item === 'array'; // PHP7.4+
$bool = array_every($myArr, $myTest);
同样,几个数组函数可用于返回空数组或填充数组。 尽管正如上面提到的那样,实际的 JS [].every
会在获得true
返回值后立即停止,如果您有一个大数组要迭代,这可以节省大量时间。 我遇到了这个问题,寻找一个快速的、函数式编程风格的代码来迭代三个数组项。
我准备这个解决方案尽可能地接近JavaScript 的Array.prototype.every()
。
描述:
array_every()
方法测试数组中的所有元素是否通过提供的函数实现的测试。 它返回一个布尔值。
array_every()
方法对数组中存在的每个元素执行一次提供的$callback
函数,直到找到$callback
返回虚假值的那个。 如果找到这样的元素, array_every()
方法会立即返回 false。 否则,如果$callback
为所有元素返回一个真值,每个都返回真。
注意:在空数组上调用此方法将在任何条件下返回 true!
array_every()
方法不会改变调用它的数组。
array_every(array $array, string|callable $callback, null|string|object $thisArg = null): bool
$数组
要迭代的数组。
$回调
用于测试每个元素的回调函数,采用四个参数:
$value - 数组中正在处理的元素的当前值。
$key (可选) - 数组中正在处理的元素的当前键。
$index (可选) - 数组中正在处理的当前元素的索引。
$array (可选) - 被遍历的数组。
$thisArg (可选)
执行$callback
函数时用作$this
值。
如果$callback
函数为每个数组元素返回一个真值, $callback
true
。 否则为false
。
function array_every(array $array, string|callable $callback, null|string|object $thisArg = null): bool
{
$index = 0;
foreach ($array as $key => $value) {
$condition = false;
if (is_null($thisArg)) {
$condition = call_user_func_array($callback, [$value, $key, $index, $array]);
} else if (is_object($thisArg) || (is_string($thisArg) && class_exists($thisArg))) {
$condition = call_user_func_array([$thisArg, $callback], [$value, $key, $index, $array]);
} else if (is_string($thisArg) && !class_exists($thisArg)) {
throw new TypeError("Class '$thisArg' not found");
}
if (!$condition)
return false;
$index++;
}
return true;
}
$isEven = fn($v) => ($v % 2 === 0);
var_export(array_every([2, 8, 16, 36], $isEven)); // true
如果$thisArg
参数提供给array_every()
方法,它将用作$callback
的$this
值。 否则,值null
将用作其$this
值。
class Helper
{
public function isOlderThan18(int $value): bool
{
return $value > 18;
}
public static function isVowel(string $character): bool
{
return in_array($character, ['a', 'e', 'i', 'o', 'u']);
}
}
如果有问题的类在命名空间下声明,您可以在$thisArg
参数中传递完全限定的类名。
var_export(array_every(["a", "u", "e"], "isVowel", "Helper")); // true
$thisArg
参数也可以是一个对象。
var_export(array_every(["Peter" => "35", "Ben" => "16", "Joe" => "43"], "isOlderThan18", (new Helper))); // false
我先写了这些代码:
function array_every(callable $callback, array $array) {
$matches = [];
foreach ($array as $item) {
if ($callback($item)) {
$matches[] = true;
} else {
$matches[] = false;
}
}
if (in_array(false, $matches)) {
return false;
}
return true;
}
然后写了它的迷你版:
function array_every(callable $callback, array $array) {
foreach ($array as $item) {
if (!$callback($item)) return false;
}
return true;
}
用法:
$array = [1, 2, 3];
$result = array_every(function($item) {
return $item == 3; // Check if all items are 3 or not (This part is like JS)
}, $array);
echo $result; // Returns false, but returns true if $array = [3, 3, 3]
所以两个版本都很好用
你得到了答案::)
我的情况是我需要检查一个数组,以了解如果一切顺利,它的所有值是否都是返回true的数字。 如果有字符串或其他内容,function 必须返回false
protected function checkIsNumber($arrayNumbers = []) {
$ga = NULL;
foreach($arrayNumbers as $value) {
if(is_null($ga)) {
$ga = is_numeric(trim($value));
} else {
$ga = $ga === is_numeric(trim($value));
}
}
return $ga;
}
我目前正在尝试将一些JavaScript移植到PHP。 但是,我似乎找不到与JavaScript array.every()
函数等效的PHP。 我找到了PHP的each()
函数,但这似乎并不是我真正需要的。
我目前正在尝试将一些JavaScript移植到PHP。 但是,我似乎找不到与JavaScript array.every()
函数等效的PHP。 我找到了PHP的each()
函数,但这似乎并不是我真正需要的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.