当前位置: 首页 > 知识库问答 >
问题:

确定PHP数组中的所有值是否为空

彭鸿彩
2023-03-14

我正在寻找性能最友好的方法来检查数组中的所有值是否为null,或者是否至少有一个元素具有其他类型。

也就是说,我需要一个方法,它根据传递的数组返回布尔值

例如:

$a = containsOnlyNull([null,null,null,null,null]);
$b = containsOnlyNull([null,null,1,null,null]);

// $a will be true
// $b will be false

共有3个答案

越星晖
2023-03-14

我喜欢使用数组。此方法统计非null项,如果大于0,则返回false。否则,它将返回true。

function containsOnlyNull($arr) {
    return array_reduce($arr, function($carry, $item) {
        return $carry += (is_null($item) ? 0 : 1);
    }, 0) > 0 ? false : true;
}

演示:IDEOne

邢炯
2023-03-14

由于您的主要目标是“最有利于性能”,因此您需要设计一个能够“短路”或中断/尽早返回的脚本。否则,在确定存在非空值后,您将进行不必要的迭代。

不必要的迭代是此任务的所有函数式迭代技术的一个不幸的副作用,因为它们只能迭代完整的数据集-例如array_filter()array_walk()array_map()array_reduce() 等)。

对于一些开发人员来说,经典循环似乎很无聊,但它提供了提前中断的能力。这项任务是否可以用功能型单衬里完成?是的,但它的性能不会超过这个片段。

代码:(演示)

function containsOnlyNull(array $array): bool
{
    foreach ($array as $value) {
        if ($value !== null) {
            return false;
        }
    }
    return true;
}

echo 'a: ' . var_export(containsOnlyNull([null,null,null,null,null]), true);  // 5 iterations for true outcome
echo "\n";
echo 'b: ' . var_export(containsOnlyNull([null,null,1,null,null]), true);  // 3 iterations for false outcome

输出:

a: true
b: false

对于将提供相同布尔输出的函数迭代器,这里有一些示例(但我仍然在我自己的项目中直接使用上述技术)。(多技术演示)

  1. (bool) array_reduce(
        $payload,
        function ($acc, $value) {
            return $acc && $value === null;
        },
        true
    )
    
    !array_filter(
        $payload,
        function ($value) {
            return $value !== null;
        }
    )
    

    最简洁地说:

    $payload === array_filter($payload, 'is_null')
    

呼延辰龙
2023-03-14
function containsOnlyNull($input)
{
    return empty(array_filter($input, function ($a) { return $a !== null;}));
}
 类似资料:
  • 问题内容: 我正在从表单中添加一系列项目,如果所有项目都是空的,我想执行一些验证并将其添加到错误字符串中。所以我有: 然后,如果所有数组元素均为空,请执行: 问题答案: 您可以只使用内置的array_filter 如果未提供回调,则将删除所有等于FALSE的输入项(请参阅转换为布尔值)。 因此可以在一条简单的代码行中做到这一点。

  • 问题内容: 在Java中,给定一个值数组(例如整数),是否有一种方法可以有效地检查它们是否都具有特定值? 例如,使用整数数组,例如: 并且只有在所有条件均为2的情况下,您才需要执行一项操作?有没有比这更有效的方法: 我知道可以用C ++做到这一点,但是Java呢? 问题答案: 或者,如果使用Java 8,则可以执行以下操作: 基本上,使用Streams可以非常简洁地完成与集合/数组有关的所有操作。

  • 问题内容: 我需要确定数组中是否存在值。 我正在使用以下功能: 上面的函数总是返回false。 数组值和函数调用如下: 问题答案: 你可以像这样使用它:

  • 问题内容: 我想找出$ all是否包含所有$ search_this值并返回true或false。有什么想法吗? 问题答案: 看一下array_intersect()。

  • 问题内容: 我有一个像这样的值: 给定,有没有一种很好的方法来测试是否包含? 问题答案: 警告:这不适用于图元数组(请参见注释)。 从开始,你现在可以使用。 要检查的阵列是否,或包含一个值使用或分别。 例

  • 问题内容: 如何确定在Java数组中是否包含特定值? 问题答案: 从java-8开始,你现在可以使用Streams。 要检查的阵列是否int,double或long包含一个值使用IntStream,DoubleStream或LongStream分别。 例 Java SE 9的简要更新 引用数组不好。对于这种情况,我们要紧紧追赶。从Java SE 9开始,我们有了。 “给出String,是否有测试V